| 1 | PSOORED6 ;BIR/SAB - edit orders from backdoor ;03/06/96 | 
|---|
| 2 | ;;7.0;OUTPATIENT PHARMACY;**78,104,117,133,143,219,148,247,268,260**;DEC 1997;Build 84 | 
|---|
| 3 | ;External reference to ^PSDRUG supported by DBIA 221 | 
|---|
| 4 | ;External reference to ^PS(50.7 supported by DBIA 2223 | 
|---|
| 5 | ;External reference ^PS(50.606 supported by DBIA 2174 | 
|---|
| 6 | DRG ;select drug | 
|---|
| 7 | S PSORX("EDIT")=1,RX0HLD=RX0 | 
|---|
| 8 | 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),"^")) | 
|---|
| 9 | D ^PSODRG I PSODRUG("IEN")=$P(RX0,"^",6) K PSORXED("FLD",6) | 
|---|
| 10 | D:PSODRUG("IEN")'=$P(RX0,"^",6)  I $G(PSORX("DFLG")) K PSORXED("FLD",6) S PSORXED("DFLG")=1 Q | 
|---|
| 11 | .D POST^PSODRG | 
|---|
| 12 | .I '$O(^PSRX(PSORXED("IRXN"),1,0)) S PSORXED("FLD",17)=$G(PSODRUG("COST")) | 
|---|
| 13 | .I $G(PSORX("DFLG")) K PSORXED("FLD",6),PSODRUG,PSOOIFLG,PSOSIGFL,VALMSG Q | 
|---|
| 14 | .D KV S DIR(0)="Y",DIR("B")="YES" | 
|---|
| 15 | .S DIR("A",1)="You have changed the dispense drug from" | 
|---|
| 16 | .S DIR("A",2)=$P(^PSDRUG($P(PSORXED("RX0"),"^",6),0),"^")_" to "_$P(^PSDRUG(PSODRUG("IEN"),0),"^")_"." | 
|---|
| 17 | .I $P($G(^PSRX(PSORXED("IRXN"),"SIG")),"^",2),$O(^PSRX(PSORXED("IRXN"),"SIG1",0)) S DIR("A",3)="" D | 
|---|
| 18 | ..F I=0:0 S I=$O(^PSRX(PSORXED("IRXN"),"SIG1",I)) Q:'I  S DIR("A",3+I)=$S(I=1:"Current SIG: ",1:"")_$G(^PSRX(PSORXED("IRXN"),"SIG1",I,0)) | 
|---|
| 19 | .S DIR("A")="Do You want to Edit the SIG" | 
|---|
| 20 | .D ^DIR K DIR I $D(DIRUT) S PSORX("DFLG")=1 D M1 | 
|---|
| 21 | .Q:$D(DIRUT)!('Y) | 
|---|
| 22 | .S PSOREEDQ=1 D DOLST^PSOORED3,DOSE^PSOORED3 K PSOREEDQ | 
|---|
| 23 | .I '$O(PSORXED("DOSE",0)) S PSORX("DFLG")=1 Q | 
|---|
| 24 | .D:$G(PSOSIGFL) M2 | 
|---|
| 25 | S RX0=RX0HLD K RX0HLD I $G(PSODRUG("OI"))=$G(PSOI) D  Q | 
|---|
| 26 | .D:$O(^TMP("PSORXDC",$J,0)) | 
|---|
| 27 | ..W !!,"This edit will discontinue the duplicate Rx & change the dispensed drug!" | 
|---|
| 28 | ..K DIR,X,Y S DIR("A")="Do You Want to Proceed",DIR("B")="NO",DIR(0)="Y" | 
|---|
| 29 | ..D ^DIR K DIR S:'Y!($D(DIRUT)) PSORXED("DFLG")=1 D:Y DCORD^PSONEW2 | 
|---|
| 30 | .Q:$G(PSORXED("DFLG")) | 
|---|
| 31 | .I PSODRUG("IEN")'=$P(RX0,"^",6) D | 
|---|
| 32 | ..S PSORXED("FLD",6)=PSODRUG("IEN"),PSORXED("FLD",39.2)=PSOI | 
|---|
| 33 | .S:$G(PSODRUG("TRADE NAME"))]"" PSORXED("FLD",6.5)=PSODRUG("TRADE NAME") | 
|---|
| 34 | .S:$G(PSODRUG("NDC"))]"" PSORXED("FLD",27)=PSODRUG("NDC") | 
|---|
| 35 | .S:$G(PSODRUG("DAW"))]"" PSORXED("FLD",81)=PSODRUG("DAW") | 
|---|
| 36 | 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 | 
|---|
| 37 | Q | 
|---|
| 38 | PSOCOU ;patient counseling | 
|---|
| 39 | K DIC,DIQ S DIC=52,DA=PSORXED("IRXN"),DIQ="PSORXED",DR=41 D EN^DIQ1 K DIC,DIQ | 
|---|
| 40 | 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) | 
|---|
| 41 | I $D(DIRUT) K PSORXED("FLD",41) D KV Q | 
|---|
| 42 | S PSORXED("FLD",DR)=Y D  K DIRUT | 
|---|
| 43 | .I Y D  Q | 
|---|
| 44 | ..K DIC,DIQ S DIC=52,DA=PSORXED("IRXN"),DIQ="PSORXED",DR=42 D EN^DIQ1 K DIC,DIQ | 
|---|
| 45 | ..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) | 
|---|
| 46 | ..I $D(DIRUT) K PSORXED("FLD",41),DUOUT,DTOUT Q | 
|---|
| 47 | ..S PSORXED("FLD",42)=Y | 
|---|
| 48 | .S PSORXED("FLD",41)=0,PSORXED("FLD",42)="@" | 
|---|
| 49 | Q | 
|---|
| 50 | PSOI ;select orderable item | 
|---|
| 51 | W !!,"Current Orderable Item: "_$P(^PS(50.7,PSOI,0),"^")_" "_$P(^PS(50.606,$P(^(0),"^",2),0),"^") | 
|---|
| 52 | S DIC("B")=$P(^PS(50.7,PSOI,0),"^"),DIC="^PS(50.7,",DIC(0)="AEMQZ" | 
|---|
| 53 | 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  " | 
|---|
| 54 | S DIC("S")=DIC("S")_"I $P($G(^PSDRUG(PSOL,2)),U,3)[""O"",'$G(^(""I""))!($G(^(""I""))'<DT) S PSOF=1" D ^DIC I "^"[X S PSORXED("DFLG")=1 Q | 
|---|
| 55 | G:Y<1 PSOI Q:PSOI=+Y | 
|---|
| 56 | S PSODRUG("OI")=+Y,PSODRUG("OIN")=Y(0,0) K DIC | 
|---|
| 57 | I PSOI'=PSODRUG("OI") W !!,"New Orderable Item selected. This edit will create a new prescription!",! D  K PSHOLDD Q | 
|---|
| 58 | .D PAUSE^VALM1,M2 | 
|---|
| 59 | .S PSHOLDD=$G(PSODRUG("IEN")) K PSODRUG("IEN"),PSODRUG("NAME") S PSODRUG("DEA")="",(PSOOIFLG,PSOSIGFL)=1 | 
|---|
| 60 | .D DREN^PSOORNW2 | 
|---|
| 61 | .I $G(PSHOLDD),$G(PSODRUG("IEN")),$G(PSHOLDD)'=$G(PSODRUG("IEN")) D  Q:$G(PSORX("DFLG")) | 
|---|
| 62 | ..D FULL^VALM1,POST^PSODRG S VALMBCK="R" | 
|---|
| 63 | ..I $G(PSORX("DFLG")) K PSODRUG S PSODRUG("IEN")=$G(PSHOLDD),PSODRUG("NAME")=$P($G(^PSDRUG(PSODRUG("IEN"),0)),"^") K PSOOIFLG,PSOSIGFL S VALMSG="" | 
|---|
| 64 | .I '$G(PSODRUG("IEN")) W !!,"DRUG NAME REQUIRED!" D 2^PSOORNW1 | 
|---|
| 65 | .I '$G(PSODRUG("IEN")) K PSORXED("FLD"),INDEL,^TMP($J,"INS1"),PSOSIGFL,VALMSG S PSORXED("DFLG")=1,VALMSG="Dispense Drug NOT Selected!" Q | 
|---|
| 66 | .D KV S DIR(0)="Y",DIR("B")="NO",DIR("A",1)="You have changed the Orderable Item from",DIR("A",2)=$P(^PS(50.7,PSOI,0),"^")_" to "_PSODRUG("OIN")_".",DIR("A")="Do You want to Edit the SIG" | 
|---|
| 67 | .D ^DIR K DIR I $D(DIRUT) K PSODRUG("OIN"),PSOOIFLG,PSOSIGFL S PSODRUG("OI")=PSOI,VALMSG="",PSORX("DFLG")=1 Q | 
|---|
| 68 | .I 'Y S PSORX("DFLG")=1 Q | 
|---|
| 69 | .S PSOREEDQ=1 D DOLST^PSOORED3,DOSE^PSOORED3 K PSOREEDQ | 
|---|
| 70 | .I '$O(PSORXED("DOSE",0)) S PSORX("DFLG")=1 Q | 
|---|
| 71 | .D:$G(PSOSIGFL) M2 | 
|---|
| 72 | S PSORXED("FLD",39.2)=PSOI | 
|---|
| 73 | Q | 
|---|
| 74 | NCPDP ;Reverse previously billed Rx on an edited orderable item or drug. | 
|---|
| 75 | N RX,NPSOY | 
|---|
| 76 | S RX=$G(PSORXED("IRXN")) I RX="" D | 
|---|
| 77 | . S NPSOY=$O(PSONEW("OLD LAST RX#","")),NPSOY=$G(PSONEW("OLD LAST RX#",NPSOY)),RX=$O(^PSRX("B",NPSOY,RX)) | 
|---|
| 78 | I 'RX Q | 
|---|
| 79 | D REVERSE^PSOBPSU1(RX,,"DC",7) S NCPDPFLG=0 | 
|---|
| 80 | Q | 
|---|
| 81 | UPDATE ;add new data to file | 
|---|
| 82 | N RXREF,UPDATE,FLDS,CHGNDC | 
|---|
| 83 | Q:'$G(PSORXED("IRXN")) | 
|---|
| 84 | I $O(PSORXED("FLD",0))!($G(^TMP($J,"INS1",0))]"")!($G(INSDEL))!($O(PSORXED("ODOSE",0))) D  G:'Y UPDX | 
|---|
| 85 | .K DIR,DIRUT,DTOUT,DUOUT | 
|---|
| 86 | .S DIR(0)="Y",DIR("A")="Are You Sure You Want to Update Rx "_$P(^PSRX(PSORXED("IRXN"),0),"^"),DIR("B")="Yes" | 
|---|
| 87 | .D ^DIR K DIR I 'Y D M1 Q | 
|---|
| 88 | .I $D(^PSRX(PSORXED("IRXN"),1,0))  D | 
|---|
| 89 | ..S RXREF=$P(^PSRX(PSORXED("IRXN"),0),"^",9)-$P(^PSRX(PSORXED("IRXN"),1,0),"^",4) | 
|---|
| 90 | .E  S RXREF=0 | 
|---|
| 91 | .K X,DIRUT,DUOUT,DTOUT | 
|---|
| 92 | I $D(PSORXED("FLD",39.3)) D UPDATE^PSODIAG  ;update ICD's after edit | 
|---|
| 93 | ; - Retrieving fields before changes that are relevant for 3rd Party Billing | 
|---|
| 94 | D GETS^DIQ(52,PSORXED("IRXN")_",","4;7;8;20;22;27;81","I","FLDS") | 
|---|
| 95 | K Y S DA=PSORXED("IRXN"),DIE="^PSRX(",FLD=0 | 
|---|
| 96 | F  S FLD=$O(PSORXED("FLD",FLD)) Q:'FLD  D | 
|---|
| 97 | .I FLD=12!(FLD=24)!(FLD=35) D  Q | 
|---|
| 98 | ..I FLD=12,PSORXED("FLD",12)="@" S $P(^PSRX(DA,3),"^",7)="" Q | 
|---|
| 99 | ..I FLD=12,PSORXED("FLD",12)]"" S $P(^PSRX(DA,3),"^",7)=PSORXED("FLD",12) Q | 
|---|
| 100 | ..I FLD=24,PSORXED("FLD",24)="@" S $P(^PSRX(DA,2),"^",4)="" Q | 
|---|
| 101 | ..I FLD=24,PSORXED("FLD",24)]"" S $P(^PSRX(DA,2),"^",4)=PSORXED("FLD",24) Q | 
|---|
| 102 | ..I FLD=35,PSORXED("FLD",35)="@" S $P(^PSRX(DA,"MP"),"^")="" Q | 
|---|
| 103 | ..I FLD=35,PSORXED("FLD",35)]"" S $P(^PSRX(DA,"MP"),"^")=PSORXED("FLD",35) Q | 
|---|
| 104 | .I FLD=114 D  Q | 
|---|
| 105 | ..I PSORXED("FLD",114)="@" K ^PSRX(DA,"INS"),^PSRX(DA,"INS1") | 
|---|
| 106 | ..I PSORXED("FLD",114)'="@" D | 
|---|
| 107 | ...S ^PSRX(DA,"INS")=PSORXED("FLD",114) | 
|---|
| 108 | ...S X=PSORXED("FLD",114) D SIG^PSOHELP Q:$G(INS1)']"" | 
|---|
| 109 | ...S PSORXED("SIG",1)=$E(INS1,2,9999999) K ^PSRX(DA,"INS1") | 
|---|
| 110 | ...S ^PSRX(DA,"INS1",0)="^52.0115^1^1^"_DT_"^^" | 
|---|
| 111 | ...S ^PSRX(DA,"INS1",1,0)=PSORXED("SIG",1) | 
|---|
| 112 | ..D DOLST^PSOORED3 K:PSORXED("FLD",114)="@" PSORXED("SIG") D EN^PSOFSIG(.PSORXED),UPDSIG^PSOORED3 | 
|---|
| 113 | .I FLD=27 D  Q | 
|---|
| 114 | ..I PSORXED("FLD",27)'=$$GETNDC^PSONDCUT(DA,0) D | 
|---|
| 115 | ...S CHGNDC=1 D RXACT^PSOBPSU2(DA,0,"NDC changed from "_$$GETNDC^PSONDCUT(DA,0)_" to "_PSORXED("FLD",27)_".","E") | 
|---|
| 116 | ..D SAVNDC^PSONDCUT(DA,0,PSORXED("FLD",27),0,1) | 
|---|
| 117 | .I FLD=81 D SAVDAW^PSODAWUT(DA,0,PSORXED("FLD",81)) Q | 
|---|
| 118 | .S DR=FLD_"////"_PSORXED("FLD",FLD) D ^DIE | 
|---|
| 119 | .I FLD=4 D UDPROV^PSOOREDT Q | 
|---|
| 120 | ; | 
|---|
| 121 | ; - Re-submitting Rx to ECME due to edits | 
|---|
| 122 | D RESUB^PSOORED7 | 
|---|
| 123 | ; | 
|---|
| 124 | I $G(INSDEL) K ^PSRX(DA,"INS"),^PSRX(DA,"INS1") D DOLST^PSOORED3 K PSORXED("SIG") D EN^PSOFSIG(.PSORXED),UPDSIG^PSOORED3 G UPDX | 
|---|
| 125 | I $O(^TMP($J,"INS1",0)) D | 
|---|
| 126 | .K ^PSRX(DA,"INS"),^PSRX(DA,"INS1"),DD,PSORXED("SIG") | 
|---|
| 127 | .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 | 
|---|
| 128 | .S ^PSRX(DA,"INS1",0)=^TMP($J,"INS1",0) | 
|---|
| 129 | .I DD=1 S ^PSRX(DA,"INS")=^PSRX(DA,"INS1",1,0) | 
|---|
| 130 | .D DOLST^PSOORED3,EN^PSOFSIG(.PSORXED),UPDSIG^PSOORED3 | 
|---|
| 131 | ; | 
|---|
| 132 | UPDX ; | 
|---|
| 133 | K DIE,DA,DR,FLD,X,Y,PSORXED("FLD"),DD,^TMP($J,"INS1") | 
|---|
| 134 | KV K DIR,DIRUT,DTOUT,DUOUT | 
|---|
| 135 | Q | 
|---|
| 136 | UPD ;updates dosing array | 
|---|
| 137 | S HENT=ENT | 
|---|
| 138 | UPD1 ; | 
|---|
| 139 | I $G(PSORXED("CONJUNCTION",(HENT+1)))]"" S PSORXED("CONJUNCTION",HENT)=PSORXED("CONJUNCTION",(HENT+1)) D  G UPD | 
|---|
| 140 | .K PSORXED("CONJUNCTION",(HENT+1)) | 
|---|
| 141 | .I $D(PSORXED("DOSE",(HENT+2))) D | 
|---|
| 142 | ..S PSORXED("DOSE",(HENT+1))=PSORXED("DOSE",(HENT+2)) | 
|---|
| 143 | ..S PSORXED("ODOSE",(HENT+1))=$G(PSORXED("ODOSE",(HENT+2))) | 
|---|
| 144 | ..S PSORXED("DOSE ORDERED",(HENT+1))=$G(PSORXED("DOSE ORDERED",(HENT+2))) | 
|---|
| 145 | ..S PSORXED("UNITS",(HENT+1))=$G(PSORXED("UNITS",(HENT+2))) | 
|---|
| 146 | ..S PSORXED("NOUN",(HENT+1))=$G(PSORXED("NOUN",(HENT+2))) | 
|---|
| 147 | ..S PSORXED("DURATION",(HENT+1))=$G(PSORXED("DURATION",(HENT+2))) | 
|---|
| 148 | ..S PSORXED("CONJUNCTION",(HENT+1))=$G(PSORXED("CONJUNCTION",(HENT+2))) | 
|---|
| 149 | ..S PSORXED("ROUTE",(HENT+1))=$G(PSORXED("ROUTE",(HENT+2))) | 
|---|
| 150 | ..S PSORXED("SCHEDULE",(HENT+1))=$G(PSORXED("SCHEDULE",(HENT+2))) | 
|---|
| 151 | ..S PSORXED("VERB",(HENT+1))=$G(PSORXED("VERB",(HENT+2))) | 
|---|
| 152 | ..K PSORXED("DOSE",(HENT+2)),PSORXED("ODOSE",(HENT+2)),PSORXED("DOSE ORDERED",(HENT+2)) | 
|---|
| 153 | ..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)) | 
|---|
| 154 | .S HENT=HENT+1 | 
|---|
| 155 | F I=0:0 S I=$O(PSORXED("DOSE",I)) Q:'I  S SENT=$G(SENT)+1 | 
|---|
| 156 | Q | 
|---|
| 157 | ; | 
|---|
| 158 | M1 D M1^PSOOREDX | 
|---|
| 159 | Q | 
|---|
| 160 | M2 D M2^PSOOREDX | 
|---|
| 161 | Q | 
|---|