PSOORED6 ;BIR/SAB - edit orders from backdoor ;Mar 28, 2022@14:32:09
;;7.0;OUTPATIENT PHARMACY;**78,104,117,133,143,219,148,247,268,260,269,251,372,422,574,441,703,753**;DEC 1997;Build 53
;Reference to ^PSDRUG supported by DBIA 221
;Reference to ^PS(50.7 supported by DBIA 2223
;Reference ^PS(50.606 supported by DBIA 2174
DRG ;select drug
S PSORX("EDIT")=1,RX0HLD=RX0
S PSODRUG("IEN")=$S($G(PSODRUG("IEN"))]"":PSODRUG("IEN"),1:$P(RX0,"^",6)),PSODRUG("NAME")=$S($G(PSODRUG("NAME"))]"":PSODRUG("NAME"),1:$P(^PSDRUG($P(RX0,"^",6),0),"^"))
D ^PSODRG I PSODRUG("IEN")=$P(RX0,"^",6) K PSORXED("FLD",6)
D:PSODRUG("IEN")'=$P(RX0,"^",6) I $G(PSORX("DFLG")) K PSORXED("FLD",6) S PSORXED("DFLG")=1 Q
.S ^TMP("PSORXBO",$J,RX0,0)=1
.D POST^PSODRG
.I '$O(^PSRX(PSORXED("IRXN"),1,0)) S PSORXED("FLD",17)=$G(PSODRUG("COST"))
.I $G(PSORX("DFLG")) K PSORXED("FLD",6),PSODRUG,PSOOIFLG,PSOSIGFL,VALMSG Q
.N PSOXXX ;*422
.S PSOXXX(1)="You have changed the dispense drug from",PSOXXX(2)=$P(^PSDRUG($P(PSORXED("RX0"),"^",6),0),"^")_" to "_$P(^PSDRUG(PSODRUG("IEN"),0),"^")_"." D EN^DDIOL(.PSOXXX,"","!") S PSOAC=1 ;*422
.S PSOREEDQ=1 D DOLST^PSOORED3,DOSE^PSOORED3 K PSOREEDQ
.I '$O(PSORXED("DOSE",0)) S PSORX("DFLG")=1 Q
.;I $P($G(PSORXED("RX0")),U,11)="P",PSODRUG("DEA")["D",+$G(PSOFRPK)'=1 D
.;.N DIR,PRKMW D MW^PSOPRK S PSOFRPK=1,PSORXED("MAIL/WINDOW")=PRKMW ;PAPI 441
.D:$G(PSOSIGFL) M2
S RX0=RX0HLD K RX0HLD I $G(PSODRUG("OI"))=$G(PSOI) D Q
.D:$O(^TMP("PSORXDC",$J,0))
..W !!,"This edit will discontinue the duplicate Rx & change the dispensed drug!"
..K DIR,X,Y S DIR("A")="Do You Want to Proceed",DIR("B")="NO",DIR(0)="Y"
..D ^DIR K DIR S:'Y!($D(DIRUT)) PSORXED("DFLG")=1 D:Y DCORD^PSONEW2
.Q:$G(PSORXED("DFLG"))
.I PSODRUG("IEN")'=$P(RX0,"^",6) D
..S PSORXED("FLD",6)=PSODRUG("IEN"),PSORXED("FLD",39.2)=PSOI
.S:$G(PSODRUG("TRADE NAME"))]"" PSORXED("FLD",6.5)=PSODRUG("TRADE NAME")
.S:$G(PSODRUG("NDC"))]"" PSORXED("FLD",27)=PSODRUG("NDC")
.S:$G(PSODRUG("DAW"))]"" PSORXED("FLD",81)=PSODRUG("DAW")
W !!,"New Orderable Item selected. This edit will create a new prescription!",! D PAUSE^VALM1 S VALMSG="New Orderable Item selected. This edit will create a new prescription!" S (PSOOIFLG,PSOSIGFL)=1
Q
PSOCOU ;patient counseling
K DIC,DIQ S DIC=52,DA=PSORXED("IRXN"),DIQ="PSORXED",DR=41 D EN^DIQ1 K DIC,DIQ
D KV S DIR(0)="52,41" S:$G(PSORXED(52,DA,DR))]"" DIR("B")=PSORXED(52,DA,DR) D ^DIR K DIR,PSORXED(52,DA,DR)
I $D(DIRUT) K PSORXED("FLD",41) D KV Q
S PSORXED("FLD",DR)=Y D K DIRUT
.I Y D Q
..K DIC,DIQ S DIC=52,DA=PSORXED("IRXN"),DIQ="PSORXED",DR=42 D EN^DIQ1 K DIC,DIQ
..K DIR,DIRUT S DIR(0)="52,42" S:$G(PSORXED(52,DA,DR))]"" DIR("B")=PSORXED(52,DA,DR) D ^DIR K DIR,PSORXED(52,DA,DR)
..I $D(DIRUT) K PSORXED("FLD",41),DUOUT,DTOUT Q
..S PSORXED("FLD",42)=Y
.S PSORXED("FLD",41)=0,PSORXED("FLD",42)="@"
Q
PSOI ;select orderable item
W !!,"Current Orderable Item: "_$P(^PS(50.7,PSOI,0),"^")_" "_$P(^PS(50.606,$P(^(0),"^",2),0),"^")
S DIC("B")=$P(^PS(50.7,PSOI,0),"^"),DIC="^PS(50.7,",DIC(0)="AEMQZ"
S DIC("S")="I '$P(^PS(50.7,+Y,0),""^"",4)!($P(^(0),""^"",4)'<DT) N PSOF,PSOL S (PSOF,PSOL)=0 F S PSOL=$O(^PSDRUG(""ASP"",+Y,PSOL)) Q:PSOF!'PSOL "
S DIC("S")=DIC("S")_"I $P($G(^PSDRUG(PSOL,2)),U,3)[""O"",'$G(^(""I""))!($G(^(""I""))'<DT) S PSOF=1"
S D="B^C" D MIX^DIC1 I "^"[X S PSORXED("DFLG")=1 Q
G:Y<1 PSOI Q:PSOI=+Y
S PSODRUG("OI")=+Y,PSODRUG("OIN")=Y(0,0) K DIC
I PSOI'=PSODRUG("OI") W !!,"New Orderable Item selected. This edit will create a new prescription!",! D K PSHOLDD Q
.N PSODDCHK S PSODDCHK=0 ;*422 - DUP DRUG CHECK ALREADY DONE IF SET TO 1
.D PAUSE^VALM1 I ($D(DTOUT))!($D(DUOUT))!($G(DIRUT)) S PSORX("DFLG")=1 D M1 Q
.D M2
.S PSHOLDD=$G(PSODRUG("IEN")) K PSODRUG("IEN"),PSODRUG("NAME") S PSODRUG("DEA")="",(PSOOIFLG,PSOSIGFL)=1
.D DREN^PSOORNW2
.I $G(PSHOLDD),$G(PSODRUG("IEN")),$G(PSHOLDD)'=$G(PSODRUG("IEN")) D Q:$G(PSORX("DFLG"))
..I $G(PSORX("DFLG")) K PSODRUG S PSODRUG("IEN")=$G(PSHOLDD),PSODRUG("NAME")=$P($G(^PSDRUG(PSODRUG("IEN"),0)),"^") K PSOOIFLG,PSOSIGFL S VALMSG=""
.I '$G(PSODRUG("IEN")) W !!,"DRUG NAME REQUIRED!" D 2^PSOORNW1 S PSODDCHK=1 ;*422
.I '$G(PSODRUG("IEN")) K PSORXED("FLD"),INDEL,^TMP($J,"INS1"),PSOSIGFL,VALMSG S PSORXED("DFLG")=1,VALMSG="Dispense Drug NOT Selected!" Q
.D FULL^VALM1 D:'$G(PSODDCHK) POST^PSODRG S VALMBCK="R" ;*422 ADDED PSODDCHK CHECK
.I PSORX("DFLG") K PSORXED("FLD"),INDEL,^TMP($J,"INS1"),PSOSIGFL,VALMSG Q
.N PSOXXX ;*422
.S PSOXXX(1)="You have changed the Orderable Item from"
.S PSOXXX(2)=$P(^PS(50.7,PSOI,0),"^")_" "_$P(^PS(50.606,$P(^PS(50.7,PSOI,0),"^",2),0),"^")_" to "_PSODRUG("OIN")_" "_$P(^PS(50.606,$P(^PS(50.7,PSODRUG("OI"),0),"^",2),0),"^") D EN^DDIOL(.PSOXXX,"","!") ;*422
.S PSOREEDQ=1 D DOLST^PSOORED3,DOSE^PSOORED3 K PSOREEDQ
.I '$O(PSORXED("DOSE",0)) S PSORX("DFLG")=1 Q
.D:$G(PSOSIGFL) M2
S PSORXED("FLD",39.2)=PSOI
Q
NCPDP ;Reverse previously billed Rx on an edited orderable item or drug.
N RX,NPSOY
S RX=$G(PSORXED("IRXN")) I RX="" D
. S NPSOY=$O(PSONEW("OLD LAST RX#","")),NPSOY=$G(PSONEW("OLD LAST RX#",NPSOY)),RX=$O(^PSRX("B",NPSOY,RX))
I 'RX Q
D REVERSE^PSOBPSU1(RX,,"DC",7) S NCPDPFLG=0
Q
UPDATE ;add new data to file
N RXREF,UPDATE,FLDS,CHGNDC,FLDTPRE
Q:'$G(PSORXED("IRXN"))
I $O(PSORXED("FLD",0))!($G(^TMP($J,"INS1",0))]"")!($G(INSDEL))!($O(PSORXED("ODOSE",0))) D G:'Y UPDX
.K DIR,DIRUT,DTOUT,DUOUT
.S DIR(0)="Y",DIR("A")="Are You Sure You Want to Update Rx "_$P(^PSRX(PSORXED("IRXN"),0),"^"),DIR("B")="Yes"
.D ^DIR K DIR I 'Y D M1 Q
.I $D(^PSRX(PSORXED("IRXN"),1,0)) D
..S RXREF=$P(^PSRX(PSORXED("IRXN"),0),"^",9)-$P(^PSRX(PSORXED("IRXN"),1,0),"^",4)
.E S RXREF=0
.K X,DIRUT,DUOUT,DTOUT
I $D(PSORXED("FLD",39.3)) D UPDATE^PSODIAG ;update ICD's after edit
; - Retrieving fields before changes that are relevant for 3rd Party Billing
D GETS^DIQ(52,PSORXED("IRXN")_",","4;7;8;20;22;27;81","I","FLDS")
K Y S DA=PSORXED("IRXN"),DIE="^PSRX(",FLD=0
F S FLD=$O(PSORXED("FLD",FLD)) Q:'FLD D
.I FLD=12!(FLD=24)!(FLD=35) D Q
..I FLD=12,PSORXED("FLD",12)="@" S $P(^PSRX(DA,3),"^",7)="" Q
..I FLD=12,PSORXED("FLD",12)]"" S $P(^PSRX(DA,3),"^",7)=PSORXED("FLD",12) Q
..I FLD=24,PSORXED("FLD",24)="@" S $P(^PSRX(DA,2),"^",4)="" Q
..I FLD=24,PSORXED("FLD",24)]"" S $P(^PSRX(DA,2),"^",4)=PSORXED("FLD",24) Q
..I FLD=35,PSORXED("FLD",35)="@" S $P(^PSRX(DA,"MP"),"^")="" Q
..I FLD=35,PSORXED("FLD",35)]"" S $P(^PSRX(DA,"MP"),"^")=PSORXED("FLD",35) Q
.I FLD=114!(FLD=128)!(FLD=129) D Q ;*441-IND
..I $G(PSORXED("FLD",114))="" K ^PSRX(DA,"INS"),^PSRX(DA,"INS1"),^PSRX(DA,"INSS") ;*422
..I $G(PSORXED("FLD",114))]"" D
...S ^PSRX(DA,"INS")=PSORXED("FLD",114)
...S X=PSORXED("FLD",114) D SIG^PSOHELP Q:$G(INS1)']""
...S PSORXED("SIG",1)=$E(INS1,2,9999999) K ^PSRX(DA,"INS1")
...S ^PSRX(DA,"INS1",0)="^52.0115^1^1^"_DT_"^^"
...S ^PSRX(DA,"INS1",1,0)=PSORXED("SIG",1)
..I $D(PSORXED("FLD",128)) S $P(^PSRX(DA,"IND"),"^")=PSORXED("FLD",128) K PSORXED("FLD",128) ;*441-IND
..I $D(PSORXED("FLD",129)) S $P(^PSRX(DA,"IND"),"^",2)=PSORXED("FLD",129) K PSORXED("FLD",129)
..I $D(PSORXED("FLD",130)) S $P(^PSRX(DA,"IND"),"^",3)=PSORXED("FLD",130) K PSORXED("FLD",130)
..D DOLST^PSOORED3 D EN^PSOFSIG(.PSORXED),UPDSIG^PSOORED3
.I FLD=27 D Q
..I PSORXED("FLD",27)'=$$GETNDC^PSONDCUT(DA,0) D
...S CHGNDC=1
...D RXACT^PSOBPSU2(DA,0,"NDC changed from "_$$GETNDC^PSONDCUT(DA,0)_" to "_PSORXED("FLD",27)_".","E")
..D SAVNDC^PSONDCUT(DA,0,PSORXED("FLD",27),0,1)
.I FLD=81 D SAVDAW^PSODAWUT(DA,0,PSORXED("FLD",81)) Q
.I FLD=100.2 D Q ;p753
..N PSOMAIL,PSOMAILF
..S PSOMAILF=$$GET1^DIQ(52,DA,100.2)
..S DR=FLD_"////"_PSORXED("FLD",FLD) D ^DIE
..S PSOMAIL=$$GET1^DIQ(52,DA,100.2)
..I PSOMAILF']"" D RXACT^PSOBPSU2(DA,,"Mail Exemption changed to "_PSOMAIL_".","E") Q
..I PSOMAIL]"" D RXACT^PSOBPSU2(DA,,"Mail Exemption changed from "_PSOMAILF_" to "_PSOMAIL_".","E") Q
..I PSOMAIL']"" D RXACT^PSOBPSU2(DA,,"Mail Exemption "_PSOMAILF_" deleted.","E") Q
.;
.; Get FILL DATE before user prompt.
.S FLDTPRE=$$GET1^DIQ(52,PSORXED("IRXN"),22,"I")
.S DR=FLD_"////"_PSORXED("FLD",FLD)
.D ^DIE
.; If FILL DATE was edited, conditionally clear out the Suspense Hold Date.
.I FLDTPRE'=$$GET1^DIQ(52,PSORXED("IRXN"),22,"I") D CLRSHD^PSOBPSU4(PSORXED("IRXN"),0)
.;
.I +DR=11 D ;441 PAPI
..I $G(PSORXED("IRXN")),$G(^PSRX(PSORXED("IRXN"),"STA"))=1 Q
..I $G(PSOFRPK) S PSDA=DA,SAVFLD=FLD D UNPARK^PSOPRK S FLD=SAVFLD K SAVFLD S DA=PSORXED("IRXN")
..I $G(PSOTOPK) D PRK^PSOPRK(DA)
.I FLD=4 D UDPROV^PSOOREDT Q
;
; - Re-submitting Rx to ECME due to edits
D RESUB^PSOORED7
;
I $G(INSDEL) K ^PSRX(DA,"INS"),^PSRX(DA,"INS1") D DOLST^PSOORED3 K PSORXED("SIG") D EN^PSOFSIG(.PSORXED),UPDSIG^PSOORED3 G UPDX
I $O(^TMP($J,"INS1",0)) D
.K ^PSRX(DA,"INS"),^PSRX(DA,"INS1"),DD,PSORXED("SIG")
.F I=0:0 S I=$O(^TMP($J,"INS1",I)) Q:'I S (PSORXED("SIG",I),^PSRX(DA,"INS1",I,0))=^TMP($J,"INS1",I,0),DD=$G(DD)+1
.S ^PSRX(DA,"INS1",0)=^TMP($J,"INS1",0)
.I DD=1 S ^PSRX(DA,"INS")=^PSRX(DA,"INS1",1,0)
.D DOLST^PSOORED3,EN^PSOFSIG(.PSORXED),UPDSIG^PSOORED3
; PSO*7.0*574
I $$ISCLOZ^PSJCLOZ(,,,,$G(PSODRUG("IEN"))) D EXPDT^PSOCLO1(.PSORXED,.CLOZPAT)
UPDX ;
K DIE,DA,DR,FLD,X,Y,PSORXED("FLD"),DD,^TMP($J,"INS1")
KV K DIR,DIRUT,DTOUT,DUOUT
Q
UPD ;updates dosing array
S HENT=ENT
UPD1 ;
I $G(PSORXED("CONJUNCTION",(HENT+1)))]"" S PSORXED("CONJUNCTION",HENT)=PSORXED("CONJUNCTION",(HENT+1)) D G UPD
.K PSORXED("CONJUNCTION",(HENT+1))
.I $D(PSORXED("DOSE",(HENT+2))) D
..S PSORXED("DOSE",(HENT+1))=PSORXED("DOSE",(HENT+2))
..S PSORXED("ODOSE",(HENT+1))=$G(PSORXED("ODOSE",(HENT+2)))
..S PSORXED("DOSE ORDERED",(HENT+1))=$G(PSORXED("DOSE ORDERED",(HENT+2)))
..S PSORXED("UNITS",(HENT+1))=$G(PSORXED("UNITS",(HENT+2)))
..S PSORXED("NOUN",(HENT+1))=$G(PSORXED("NOUN",(HENT+2)))
..S PSORXED("DURATION",(HENT+1))=$G(PSORXED("DURATION",(HENT+2)))
..S PSORXED("CONJUNCTION",(HENT+1))=$G(PSORXED("CONJUNCTION",(HENT+2)))
..S PSORXED("ROUTE",(HENT+1))=$G(PSORXED("ROUTE",(HENT+2)))
..S PSORXED("SCHEDULE",(HENT+1))=$G(PSORXED("SCHEDULE",(HENT+2)))
..S PSORXED("VERB",(HENT+1))=$G(PSORXED("VERB",(HENT+2)))
..K PSORXED("DOSE",(HENT+2)),PSORXED("ODOSE",(HENT+2)),PSORXED("DOSE ORDERED",(HENT+2))
..K PSORXED("UNITS",(HENT+2)),PSORXED("NOUN",(HENT+2)),PSORXED("DURATION",(HENT+2)),PSORXED("ROUTE",(HENT+2)),PSORXED("SCHEDULE",(HENT+2)),PSORXED("VERB",(HENT+2))
.S HENT=HENT+1
F I=0:0 S I=$O(PSORXED("DOSE",I)) Q:'I S SENT=$G(SENT)+1
Q
;
M1 D M1^PSOOREDX
Q
M2 D M2^PSOOREDX
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSOORED6 10645 printed Dec 13, 2024@02:31:55 Page 2
PSOORED6 ;BIR/SAB - edit orders from backdoor ;Mar 28, 2022@14:32:09
+1 ;;7.0;OUTPATIENT PHARMACY;**78,104,117,133,143,219,148,247,268,260,269,251,372,422,574,441,703,753**;DEC 1997;Build 53
+2 ;Reference to ^PSDRUG supported by DBIA 221
+3 ;Reference to ^PS(50.7 supported by DBIA 2223
+4 ;Reference ^PS(50.606 supported by DBIA 2174
DRG ;select drug
+1 SET PSORX("EDIT")=1
SET RX0HLD=RX0
+2 SET PSODRUG("IEN")=$SELECT($GET(PSODRUG("IEN"))]"":PSODRUG("IEN"),1:$PIECE(RX0,"^",6))
SET PSODRUG("NAME")=$SELECT($GET(PSODRUG("NAME"))]"":PSODRUG("NAME"),1:$PIECE(^PSDRUG($PIECE(RX0,"^",6),0),"^"))
+3 DO ^PSODRG
IF PSODRUG("IEN")=$PIECE(RX0,"^",6)
KILL PSORXED("FLD",6)
+4 if PSODRUG("IEN")'=$PIECE(RX0,"^",6)
Begin DoDot:1
+5 SET ^TMP("PSORXBO",$JOB,RX0,0)=1
+6 DO POST^PSODRG
+7 IF '$ORDER(^PSRX(PSORXED("IRXN"),1,0))
SET PSORXED("FLD",17)=$GET(PSODRUG("COST"))
+8 IF $GET(PSORX("DFLG"))
KILL PSORXED("FLD",6),PSODRUG,PSOOIFLG,PSOSIGFL,VALMSG
QUIT
+9 ;*422
NEW PSOXXX
+10 ;*422
SET PSOXXX(1)="You have changed the dispense drug from"
SET PSOXXX(2)=$PIECE(^PSDRUG($PIECE(PSORXED("RX0"),"^",6),0),"^")_" to "_$PIECE(^PSDRUG(PSODRUG("IEN"),0),"^")_"."
DO EN^DDIOL(.PSOXXX,"","!")
SET PSOAC=1
+11 SET PSOREEDQ=1
DO DOLST^PSOORED3
DO DOSE^PSOORED3
KILL PSOREEDQ
+12 IF '$ORDER(PSORXED("DOSE",0))
SET PSORX("DFLG")=1
QUIT
+13 ;I $P($G(PSORXED("RX0")),U,11)="P",PSODRUG("DEA")["D",+$G(PSOFRPK)'=1 D
+14 ;.N DIR,PRKMW D MW^PSOPRK S PSOFRPK=1,PSORXED("MAIL/WINDOW")=PRKMW ;PAPI 441
+15 if $GET(PSOSIGFL)
DO M2
End DoDot:1
IF $GET(PSORX("DFLG"))
KILL PSORXED("FLD",6)
SET PSORXED("DFLG")=1
QUIT
+16 SET RX0=RX0HLD
KILL RX0HLD
IF $GET(PSODRUG("OI"))=$GET(PSOI)
Begin DoDot:1
+17 if $ORDER(^TMP("PSORXDC",$JOB,0))
Begin DoDot:2
+18 WRITE !!,"This edit will discontinue the duplicate Rx & change the dispensed drug!"
+19 KILL DIR,X,Y
SET DIR("A")="Do You Want to Proceed"
SET DIR("B")="NO"
SET DIR(0)="Y"
+20 DO ^DIR
KILL DIR
if 'Y!($DATA(DIRUT))
SET PSORXED("DFLG")=1
if Y
DO DCORD^PSONEW2
End DoDot:2
+21 if $GET(PSORXED("DFLG"))
QUIT
+22 IF PSODRUG("IEN")'=$PIECE(RX0,"^",6)
Begin DoDot:2
+23 SET PSORXED("FLD",6)=PSODRUG("IEN")
SET PSORXED("FLD",39.2)=PSOI
End DoDot:2
+24 if $GET(PSODRUG("TRADE NAME"))]""
SET PSORXED("FLD",6.5)=PSODRUG("TRADE NAME")
+25 if $GET(PSODRUG("NDC"))]""
SET PSORXED("FLD",27)=PSODRUG("NDC")
+26 if $GET(PSODRUG("DAW"))]""
SET PSORXED("FLD",81)=PSODRUG("DAW")
End DoDot:1
QUIT
+27 WRITE !!,"New Orderable Item selected. This edit will create a new prescription!",!
DO PAUSE^VALM1
SET VALMSG="New Orderable Item selected. This edit will create a new prescription!"
SET (PSOOIFLG,PSOSIGFL)=1
+28 QUIT
PSOCOU ;patient counseling
+1 KILL DIC,DIQ
SET DIC=52
SET DA=PSORXED("IRXN")
SET DIQ="PSORXED"
SET DR=41
DO EN^DIQ1
KILL DIC,DIQ
+2 DO KV
SET DIR(0)="52,41"
if $GET(PSORXED(52,DA,DR))]""
SET DIR("B")=PSORXED(52,DA,DR)
DO ^DIR
KILL DIR,PSORXED(52,DA,DR)
+3 IF $DATA(DIRUT)
KILL PSORXED("FLD",41)
DO KV
QUIT
+4 SET PSORXED("FLD",DR)=Y
Begin DoDot:1
+5 IF Y
Begin DoDot:2
+6 KILL DIC,DIQ
SET DIC=52
SET DA=PSORXED("IRXN")
SET DIQ="PSORXED"
SET DR=42
DO EN^DIQ1
KILL DIC,DIQ
+7 KILL DIR,DIRUT
SET DIR(0)="52,42"
if $GET(PSORXED(52,DA,DR))]""
SET DIR("B")=PSORXED(52,DA,DR)
DO ^DIR
KILL DIR,PSORXED(52,DA,DR)
+8 IF $DATA(DIRUT)
KILL PSORXED("FLD",41),DUOUT,DTOUT
QUIT
+9 SET PSORXED("FLD",42)=Y
End DoDot:2
QUIT
+10 SET PSORXED("FLD",41)=0
SET PSORXED("FLD",42)="@"
End DoDot:1
KILL DIRUT
+11 QUIT
PSOI ;select orderable item
+1 WRITE !!,"Current Orderable Item: "_$PIECE(^PS(50.7,PSOI,0),"^")_" "_$PIECE(^PS(50.606,$PIECE(^(0),"^",2),0),"^")
+2 SET DIC("B")=$PIECE(^PS(50.7,PSOI,0),"^")
SET DIC="^PS(50.7,"
SET DIC(0)="AEMQZ"
+3 SET DIC("S")="I '$P(^PS(50.7,+Y,0),""^"",4)!($P(^(0),""^"",4)'<DT) N PSOF,PSOL S (PSOF,PSOL)=0 F S PSOL=$O(^PSDRUG(""ASP"",+Y,PSOL)) Q:PSOF!'PSOL "
+4 SET DIC("S")=DIC("S")_"I $P($G(^PSDRUG(PSOL,2)),U,3)[""O"",'$G(^(""I""))!($G(^(""I""))'<DT) S PSOF=1"
+5 SET D="B^C"
DO MIX^DIC1
IF "^"[X
SET PSORXED("DFLG")=1
QUIT
+6 if Y<1
GOTO PSOI
if PSOI=+Y
QUIT
+7 SET PSODRUG("OI")=+Y
SET PSODRUG("OIN")=Y(0,0)
KILL DIC
+8 IF PSOI'=PSODRUG("OI")
WRITE !!,"New Orderable Item selected. This edit will create a new prescription!",!
Begin DoDot:1
+9 ;*422 - DUP DRUG CHECK ALREADY DONE IF SET TO 1
NEW PSODDCHK
SET PSODDCHK=0
+10 DO PAUSE^VALM1
IF ($DATA(DTOUT))!($DATA(DUOUT))!($GET(DIRUT))
SET PSORX("DFLG")=1
DO M1
QUIT
+11 DO M2
+12 SET PSHOLDD=$GET(PSODRUG("IEN"))
KILL PSODRUG("IEN"),PSODRUG("NAME")
SET PSODRUG("DEA")=""
SET (PSOOIFLG,PSOSIGFL)=1
+13 DO DREN^PSOORNW2
+14 IF $GET(PSHOLDD)
IF $GET(PSODRUG("IEN"))
IF $GET(PSHOLDD)'=$GET(PSODRUG("IEN"))
Begin DoDot:2
+15 IF $GET(PSORX("DFLG"))
KILL PSODRUG
SET PSODRUG("IEN")=$GET(PSHOLDD)
SET PSODRUG("NAME")=$PIECE($GET(^PSDRUG(PSODRUG("IEN"),0)),"^")
KILL PSOOIFLG,PSOSIGFL
SET VALMSG=""
End DoDot:2
if $GET(PSORX("DFLG"))
QUIT
+16 ;*422
IF '$GET(PSODRUG("IEN"))
WRITE !!,"DRUG NAME REQUIRED!"
DO 2^PSOORNW1
SET PSODDCHK=1
+17 IF '$GET(PSODRUG("IEN"))
KILL PSORXED("FLD"),INDEL,^TMP($JOB,"INS1"),PSOSIGFL,VALMSG
SET PSORXED("DFLG")=1
SET VALMSG="Dispense Drug NOT Selected!"
QUIT
+18 ;*422 ADDED PSODDCHK CHECK
DO FULL^VALM1
if '$GET(PSODDCHK)
DO POST^PSODRG
SET VALMBCK="R"
+19 IF PSORX("DFLG")
KILL PSORXED("FLD"),INDEL,^TMP($JOB,"INS1"),PSOSIGFL,VALMSG
QUIT
+20 ;*422
NEW PSOXXX
+21 SET PSOXXX(1)="You have changed the Orderable Item from"
+22 ;*422
SET PSOXXX(2)=$PIECE(^PS(50.7,PSOI,0),"^")_" "_$PIECE(^PS(50.606,$PIECE(^PS(50.7,PSOI,0),"^",2),0),"^")_" to "_PSODRUG("OIN")_" "_$PIECE(^PS(50.606,$PIECE(^PS(50.7,PSODRUG("OI"),0),"^",2),0),"^")
DO EN^DDIOL(.PSOXXX,"","!")
+23 SET PSOREEDQ=1
DO DOLST^PSOORED3
DO DOSE^PSOORED3
KILL PSOREEDQ
+24 IF '$ORDER(PSORXED("DOSE",0))
SET PSORX("DFLG")=1
QUIT
+25 if $GET(PSOSIGFL)
DO M2
End DoDot:1
KILL PSHOLDD
QUIT
+26 SET PSORXED("FLD",39.2)=PSOI
+27 QUIT
NCPDP ;Reverse previously billed Rx on an edited orderable item or drug.
+1 NEW RX,NPSOY
+2 SET RX=$GET(PSORXED("IRXN"))
IF RX=""
Begin DoDot:1
+3 SET NPSOY=$ORDER(PSONEW("OLD LAST RX#",""))
SET NPSOY=$GET(PSONEW("OLD LAST RX#",NPSOY))
SET RX=$ORDER(^PSRX("B",NPSOY,RX))
End DoDot:1
+4 IF 'RX
QUIT
+5 DO REVERSE^PSOBPSU1(RX,,"DC",7)
SET NCPDPFLG=0
+6 QUIT
UPDATE ;add new data to file
+1 NEW RXREF,UPDATE,FLDS,CHGNDC,FLDTPRE
+2 if '$GET(PSORXED("IRXN"))
QUIT
+3 IF $ORDER(PSORXED("FLD",0))!($GET(^TMP($JOB,"INS1",0))]"")!($GET(INSDEL))!($ORDER(PSORXED("ODOSE",0)))
Begin DoDot:1
+4 KILL DIR,DIRUT,DTOUT,DUOUT
+5 SET DIR(0)="Y"
SET DIR("A")="Are You Sure You Want to Update Rx "_$PIECE(^PSRX(PSORXED("IRXN"),0),"^")
SET DIR("B")="Yes"
+6 DO ^DIR
KILL DIR
IF 'Y
DO M1
QUIT
+7 IF $DATA(^PSRX(PSORXED("IRXN"),1,0))
Begin DoDot:2
+8 SET RXREF=$PIECE(^PSRX(PSORXED("IRXN"),0),"^",9)-$PIECE(^PSRX(PSORXED("IRXN"),1,0),"^",4)
End DoDot:2
+9 IF '$TEST
SET RXREF=0
+10 KILL X,DIRUT,DUOUT,DTOUT
End DoDot:1
if 'Y
GOTO UPDX
+11 ;update ICD's after edit
IF $DATA(PSORXED("FLD",39.3))
DO UPDATE^PSODIAG
+12 ; - Retrieving fields before changes that are relevant for 3rd Party Billing
+13 DO GETS^DIQ(52,PSORXED("IRXN")_",","4;7;8;20;22;27;81","I","FLDS")
+14 KILL Y
SET DA=PSORXED("IRXN")
SET DIE="^PSRX("
SET FLD=0
+15 FOR
SET FLD=$ORDER(PSORXED("FLD",FLD))
if 'FLD
QUIT
Begin DoDot:1
+16 IF FLD=12!(FLD=24)!(FLD=35)
Begin DoDot:2
+17 IF FLD=12
IF PSORXED("FLD",12)="@"
SET $PIECE(^PSRX(DA,3),"^",7)=""
QUIT
+18 IF FLD=12
IF PSORXED("FLD",12)]""
SET $PIECE(^PSRX(DA,3),"^",7)=PSORXED("FLD",12)
QUIT
+19 IF FLD=24
IF PSORXED("FLD",24)="@"
SET $PIECE(^PSRX(DA,2),"^",4)=""
QUIT
+20 IF FLD=24
IF PSORXED("FLD",24)]""
SET $PIECE(^PSRX(DA,2),"^",4)=PSORXED("FLD",24)
QUIT
+21 IF FLD=35
IF PSORXED("FLD",35)="@"
SET $PIECE(^PSRX(DA,"MP"),"^")=""
QUIT
+22 IF FLD=35
IF PSORXED("FLD",35)]""
SET $PIECE(^PSRX(DA,"MP"),"^")=PSORXED("FLD",35)
QUIT
End DoDot:2
QUIT
+23 ;*441-IND
IF FLD=114!(FLD=128)!(FLD=129)
Begin DoDot:2
+24 ;*422
IF $GET(PSORXED("FLD",114))=""
KILL ^PSRX(DA,"INS"),^PSRX(DA,"INS1"),^PSRX(DA,"INSS")
+25 IF $GET(PSORXED("FLD",114))]""
Begin DoDot:3
+26 SET ^PSRX(DA,"INS")=PSORXED("FLD",114)
+27 SET X=PSORXED("FLD",114)
DO SIG^PSOHELP
if $GET(INS1)']""
QUIT
+28 SET PSORXED("SIG",1)=$EXTRACT(INS1,2,9999999)
KILL ^PSRX(DA,"INS1")
+29 SET ^PSRX(DA,"INS1",0)="^52.0115^1^1^"_DT_"^^"
+30 SET ^PSRX(DA,"INS1",1,0)=PSORXED("SIG",1)
End DoDot:3
+31 ;*441-IND
IF $DATA(PSORXED("FLD",128))
SET $PIECE(^PSRX(DA,"IND"),"^")=PSORXED("FLD",128)
KILL PSORXED("FLD",128)
+32 IF $DATA(PSORXED("FLD",129))
SET $PIECE(^PSRX(DA,"IND"),"^",2)=PSORXED("FLD",129)
KILL PSORXED("FLD",129)
+33 IF $DATA(PSORXED("FLD",130))
SET $PIECE(^PSRX(DA,"IND"),"^",3)=PSORXED("FLD",130)
KILL PSORXED("FLD",130)
+34 DO DOLST^PSOORED3
DO EN^PSOFSIG(.PSORXED)
DO UPDSIG^PSOORED3
End DoDot:2
QUIT
+35 IF FLD=27
Begin DoDot:2
+36 IF PSORXED("FLD",27)'=$$GETNDC^PSONDCUT(DA,0)
Begin DoDot:3
+37 SET CHGNDC=1
+38 DO RXACT^PSOBPSU2(DA,0,"NDC changed from "_$$GETNDC^PSONDCUT(DA,0)_" to "_PSORXED("FLD",27)_".","E")
End DoDot:3
+39 DO SAVNDC^PSONDCUT(DA,0,PSORXED("FLD",27),0,1)
End DoDot:2
QUIT
+40 IF FLD=81
DO SAVDAW^PSODAWUT(DA,0,PSORXED("FLD",81))
QUIT
+41 ;p753
IF FLD=100.2
Begin DoDot:2
+42 NEW PSOMAIL,PSOMAILF
+43 SET PSOMAILF=$$GET1^DIQ(52,DA,100.2)
+44 SET DR=FLD_"////"_PSORXED("FLD",FLD)
DO ^DIE
+45 SET PSOMAIL=$$GET1^DIQ(52,DA,100.2)
+46 IF PSOMAILF']""
DO RXACT^PSOBPSU2(DA,,"Mail Exemption changed to "_PSOMAIL_".","E")
QUIT
+47 IF PSOMAIL]""
DO RXACT^PSOBPSU2(DA,,"Mail Exemption changed from "_PSOMAILF_" to "_PSOMAIL_".","E")
QUIT
+48 IF PSOMAIL']""
DO RXACT^PSOBPSU2(DA,,"Mail Exemption "_PSOMAILF_" deleted.","E")
QUIT
End DoDot:2
QUIT
+49 ;
+50 ; Get FILL DATE before user prompt.
+51 SET FLDTPRE=$$GET1^DIQ(52,PSORXED("IRXN"),22,"I")
+52 SET DR=FLD_"////"_PSORXED("FLD",FLD)
+53 DO ^DIE
+54 ; If FILL DATE was edited, conditionally clear out the Suspense Hold Date.
+55 IF FLDTPRE'=$$GET1^DIQ(52,PSORXED("IRXN"),22,"I")
DO CLRSHD^PSOBPSU4(PSORXED("IRXN"),0)
+56 ;
+57 ;441 PAPI
IF +DR=11
Begin DoDot:2
+58 IF $GET(PSORXED("IRXN"))
IF $GET(^PSRX(PSORXED("IRXN"),"STA"))=1
QUIT
+59 IF $GET(PSOFRPK)
SET PSDA=DA
SET SAVFLD=FLD
DO UNPARK^PSOPRK
SET FLD=SAVFLD
KILL SAVFLD
SET DA=PSORXED("IRXN")
+60 IF $GET(PSOTOPK)
DO PRK^PSOPRK(DA)
End DoDot:2
+61 IF FLD=4
DO UDPROV^PSOOREDT
QUIT
End DoDot:1
+62 ;
+63 ; - Re-submitting Rx to ECME due to edits
+64 DO RESUB^PSOORED7
+65 ;
+66 IF $GET(INSDEL)
KILL ^PSRX(DA,"INS"),^PSRX(DA,"INS1")
DO DOLST^PSOORED3
KILL PSORXED("SIG")
DO EN^PSOFSIG(.PSORXED)
DO UPDSIG^PSOORED3
GOTO UPDX
+67 IF $ORDER(^TMP($JOB,"INS1",0))
Begin DoDot:1
+68 KILL ^PSRX(DA,"INS"),^PSRX(DA,"INS1"),DD,PSORXED("SIG")
+69 FOR I=0:0
SET I=$ORDER(^TMP($JOB,"INS1",I))
if 'I
QUIT
SET (PSORXED("SIG",I),^PSRX(DA,"INS1",I,0))=^TMP($JOB,"INS1",I,0)
SET DD=$GET(DD)+1
+70 SET ^PSRX(DA,"INS1",0)=^TMP($JOB,"INS1",0)
+71 IF DD=1
SET ^PSRX(DA,"INS")=^PSRX(DA,"INS1",1,0)
+72 DO DOLST^PSOORED3
DO EN^PSOFSIG(.PSORXED)
DO UPDSIG^PSOORED3
End DoDot:1
+73 ; PSO*7.0*574
+74 IF $$ISCLOZ^PSJCLOZ(,,,,$GET(PSODRUG("IEN")))
DO EXPDT^PSOCLO1(.PSORXED,.CLOZPAT)
UPDX ;
+1 KILL DIE,DA,DR,FLD,X,Y,PSORXED("FLD"),DD,^TMP($JOB,"INS1")
KV KILL DIR,DIRUT,DTOUT,DUOUT
+1 QUIT
UPD ;updates dosing array
+1 SET HENT=ENT
UPD1 ;
+1 IF $GET(PSORXED("CONJUNCTION",(HENT+1)))]""
SET PSORXED("CONJUNCTION",HENT)=PSORXED("CONJUNCTION",(HENT+1))
Begin DoDot:1
+2 KILL PSORXED("CONJUNCTION",(HENT+1))
+3 IF $DATA(PSORXED("DOSE",(HENT+2)))
Begin DoDot:2
+4 SET PSORXED("DOSE",(HENT+1))=PSORXED("DOSE",(HENT+2))
+5 SET PSORXED("ODOSE",(HENT+1))=$GET(PSORXED("ODOSE",(HENT+2)))
+6 SET PSORXED("DOSE ORDERED",(HENT+1))=$GET(PSORXED("DOSE ORDERED",(HENT+2)))
+7 SET PSORXED("UNITS",(HENT+1))=$GET(PSORXED("UNITS",(HENT+2)))
+8 SET PSORXED("NOUN",(HENT+1))=$GET(PSORXED("NOUN",(HENT+2)))
+9 SET PSORXED("DURATION",(HENT+1))=$GET(PSORXED("DURATION",(HENT+2)))
+10 SET PSORXED("CONJUNCTION",(HENT+1))=$GET(PSORXED("CONJUNCTION",(HENT+2)))
+11 SET PSORXED("ROUTE",(HENT+1))=$GET(PSORXED("ROUTE",(HENT+2)))
+12 SET PSORXED("SCHEDULE",(HENT+1))=$GET(PSORXED("SCHEDULE",(HENT+2)))
+13 SET PSORXED("VERB",(HENT+1))=$GET(PSORXED("VERB",(HENT+2)))
+14 KILL PSORXED("DOSE",(HENT+2)),PSORXED("ODOSE",(HENT+2)),PSORXED("DOSE ORDERED",(HENT+2))
+15 KILL PSORXED("UNITS",(HENT+2)),PSORXED("NOUN",(HENT+2)),PSORXED("DURATION",(HENT+2)),PSORXED("ROUTE",(HENT+2)),PSORXED("SCHEDULE",(HENT+2)),PSORXED("VERB",(HENT+2))
End DoDot:2
+16 SET HENT=HENT+1
End DoDot:1
GOTO UPD
+17 FOR I=0:0
SET I=$ORDER(PSORXED("DOSE",I))
if 'I
QUIT
SET SENT=$GET(SENT)+1
+18 QUIT
+19 ;
M1 DO M1^PSOOREDX
+1 QUIT
M2 DO M2^PSOOREDX
+1 QUIT