- 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 Apr 23, 2025@18:46:22 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