PSOBKDED ;BIR/SAB - Edit backdoor Rx Order entry ;Aug 11, 2020@11:13:08
;;7.0;OUTPATIENT PHARMACY;**11,46,91,78,99,117,133,143,268,378,416,282,450,402,518,525,538,457,557,574,598,441**;DEC 1997;Build 208
;Ref PS(50.607 IA 2221
;Ref PS(50.7 IA 2223
;Ref PS(51.2 IA 2226
;Ref PSDRUG( IA 221
;Ref DOSE^PSSORPH IA 3234
;Ref PS(55 IA 2228
1 S %DT="AEX",%DT(0)=-PSONEW("FILL DATE"),Y=PSONEW("ISSUE DATE") X ^DD("DD") S %DT("A")="ISSUE DATE: ",%DT("B")=Y D ^%DT,CID^PSOUTL
I "^"[$E(X) D KX K %DT Q
; PSO*7*538 Added Next Line
I Y=-1 W ! D CIDH^PSOUTL W ! G 1
G:Y=-1 1 S (PSOID,PSONEW("ISSUE DATE"))=Y D KX K %DT
Q
2 S PSONEW("FLD")=2 D FILLDT^PSODIR2(.PSONEW) ;Fdt
Q
3 S:$G(POERR) PSONEW("ISSUE DATE")=PSOID
S PSONEW("FLD")=3 D PTSTAT^PSODIR1(.PSONEW) ;Sta
Q
4 S PSONEW("FLD")=4 D PROV^PSODIR(.PSONEW) ;Pro
Q
5 S PSONEW("FLD")=5 D CLINIC^PSODIR2(.PSONEW) ;Cli
Q
6 S PSONEW("FLD")=6 D ^PSODRG,EN^PSODIAG ;Drg/ICD
D 6^PSODRGN
Q
7 S PSONEW("FLD")=7 D QTY^PSODIR1(.PSONEW) ;Qty
Q
8 S PSONEW("FLD")=8 D DAYS^PSODIR1(.PSONEW) ;Day
K PSMAX,PSTMAX D REF^PSOORNEW S PSONEW("N# REF")=PSONEW("# OF REFILLS")
Q
9 S PSONEW("FLD")=9 D REFILL^PSODIR1(.PSONEW) ;Ref
K PSMAX,PSTMAX
Q
10 S PSONEW("FLD")="3A" N PSOEDDOS S PSOEDDOS=1 D DOSE^PSODIR(.PSONEW) ;Dose
Q
;
Q I $G(COPY),$G(SIGOK) S PSOFDR=1 K PSONEW("SIG")
S PSONEW("FLD")=10 D SIG^PSODIR1(.PSONEW) ;Sig
I $G(COPY) K PSOFDR
S DIR(0)="E",DIR("A")="Press Return to Continue" D ^DIR D KV
Q
INS S PSONEW("FLD")="3B" D INS^PSODIR(.PSONEW) ;Ins
Q
11 S PSONEW("FLD")=11 D COPIES^PSODIR1(.PSONEW) ;Cop
Q
12 S PSONEW("FLD")=12 D MW^PSODIR2(.PSONEW) ;M/W
Q
13 S PSONEW("FLD")=13 D RMK^PSODIR2(.PSONEW) ;Rem
Q
DOSE ;backdoor
I '$G(PSONEW("ENT")) S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" (5) Dosage Ordered: " G INS1
S SD=1 F I=1:1:PSONEW("ENT") D
.I '$G(PSONEW("DOSE ORDERED",I)),$G(PSONEW("VERB",I))]"" S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" Verb: "_$G(PSONEW("VERB",I))
.S:$G(SD)=1 IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" (5)",DS=1 K SD
.D DOSE1
INS1 S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" (6)Pat Instruction:"
INS2 I $O(PSONEW("SIG",0)) F D=0:0 S D=$O(PSONEW("SIG",D)) Q:'D D
.F SG=1:1:$L(PSONEW("SIG",D)) S:$L(^TMP("PSOPO",$J,IEN,0)_" "_$P(PSONEW("SIG",D)," ",SG))>80 IEN=IEN+1,$P(^TMP("PSOPO",$J,IEN,0)," ",21)=" " D
..S:$P(PSONEW("SIG",D)," ",SG)'="" ^TMP("PSOPO",$J,IEN,0)=$G(^TMP("PSOPO",$J,IEN,0))_" "_$P(PSONEW("SIG",D)," ",SG)
I $P($G(^PS(55,PSODFN,"LAN")),"^") D
.S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" Other Patient Inst.: "
.I $G(^PSRX(+$G(PSONEW("OIRXN")),"INSS"))]"" S PSONEW("SINS")=^PSRX(PSONEW("OIRXN"),"INSS")
.S ^TMP("PSOPO",$J,IEN,0)=^TMP("PSOPO",$J,IEN,0)_$G(PSONEW("SINS"))
S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" Indications: "_$S($G(PSONEW("IND"))]"":PSONEW("IND"),1:"") ;*441-IND
I $P($G(^PS(55,PSODFN,"LAN")),"^") D
. S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" Other Indications: "_$S($G(PSONEW("INDO"))]"":PSONEW("INDO"),1:"")
Q
;
DOSE1 I $G(DS)=1 D K DS G DU
.S ^TMP("PSOPO",$J,IEN,0)=^TMP("PSOPO",$J,IEN,0)_" Dosage Ordered: "_$S($E(PSONEW("DOSE",I),1)="."&($G(PSONEW("DOSE ORDERED",I))):"0",1:"")_PSONEW("DOSE",I)_$S($G(PSONEW("UNITS",I))'="":" ("_$P(^PS(50.607,PSONEW("UNITS",I),0),"^")_")",1:"")
S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" Dosage Ordered: "_$S($E(PSONEW("DOSE",I),1)="."&($G(PSONEW("DOSE ORDERED",I))):"0",1:"")_PSONEW("DOSE",I)_$S($G(PSONEW("UNITS",I))'="":" ("_$P(^PS(50.607,PSONEW("UNITS",I),0),"^")_")",1:"")
DU I '$G(PSONEW("DOSE ORDERED",I)),$P($G(^PS(55,PSODFN,"LAN")),"^") S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" Oth. Lang. Dosage: "_$G(PSONEW("ODOSE",I))
I $G(PSONEW("DOSE ORDERED",I)),$G(PSONEW("VERB",I))]"" S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" Verb: "_$G(PSONEW("VERB",I))
S:$G(PSONEW("DOSE ORDERED",I)) IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" Dispense Units: "_$S($E($G(PSONEW("DOSE ORDERED",I)),1)=".":"0",1:"")_$G(PSONEW("DOSE ORDERED",I))
I $G(PSONEW("DOSE ORDERED",I)),$G(PSONEW("NOUN",I))]"" S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" Noun: "_PSONEW("NOUN",I)
I $G(PSONEW("ROUTE",I)) S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" Route: "_$P(^PS(51.2,PSONEW("ROUTE",I),0),"^")
S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" Schedule: "_$G(PSONEW("SCHEDULE",I))
I $G(PSONEW("DURATION",I))]"" D
.S IEN=IEN+1
.S ^TMP("PSOPO",$J,IEN,0)=" *Duration: "_PSONEW("DURATION",I)_" ("_$S(PSONEW("DURATION",I)["M":"MINUTES",PSONEW("DURATION",I)["W":"WEEKS",PSONEW("DURATION",I)["L":"MONTHS",PSONEW("DURATION",I)["H":"HOURS",1:"DAYS")_")"
I $G(PSONEW("CONJUNCTION",I))]"" S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" Conjunction: "_$S($G(PSONEW("CONJUNCTION",I))="A":"AND",$G(PSONEW("CONJUNCTION",I))="T":"THEN",$G(PSONEW("CONJUNCTION",I))="X":"EXCEPT",1:"")
Q
RTE ;*525
I $G(DRET) S PSORXED("ROUTE",ENT)=""
I $G(RTE) K RTE
D KV N MRSLS,MRX,MRDFV,MRQ S MRQ=0,MRDFV=$S($G(PSORXED("ROUTE",ENT)):$P(^PS(51.2,PSORXED("ROUTE",ENT),0),"^"),$G(RTE)]"":RTE,1:"")
S X=""
W !,"ROUTE: "_MRDFV_"//"
D G:$G(MRSLS) RTEC G:MRQ RTE
. R MRX:DTIME
. I '$T S DTOUT=1
. I MRX="^" S DUOUT=1
. I MRX="?" D MRSL^PSOORED5
. I MRX="",$G(MRDFV)]"" S MRX=$G(MRDFV)
S X=MRX
K MRSLS,MRX,MRDFV,MRQ
I X[U,$L(X)>1 S FIELD="RTE",JUMP=1 K DIRUT,DTOUT Q
Q:$D(DTOUT)!($D(DUOUT))
I X="@"!(X="") K RTE,ERTE S DRET=1,PSORXED("ROUTE",ENT)="" Q
D CKMRSL^PSOORED5
K DRET I X=$P($G(^PS(51.2,+$G(PSORXED("ROUTE",ENT)),0)),"^") S RTE=$P(^PS(51.2,PSORXED("ROUTE",ENT),0),"^"),ERTE=$P(^PS(51.2,PSORXED("ROUTE",ENT),0),"^",2) W X_" "_$G(ERTE) Q
RTEC ;
K DIC S DIC=51.2,DIC(0)="QEZMX",DIC("S")="I $P(^(0),""^"",4)" D ^DIC Q:X[U G:Y=-1 RTE W " "_$P(Y(0),"^",2)
S:X'="" PSORXED("ROUTE",ENT)=+Y,RTE=Y(0,0),ERTE=$P(Y(0),"^",2)
Q
ASK ;
K JUMP,UNITN,DOSE D KV D DOSE^PSSORPH(.DOSE,PSODRUG("IEN"),"O",PSODFN)
N PSODOSCT,PSODOSFL,PSODOSWT D FULL^VALM1 ;402
I $D(DOSE("DD")) D LST2^PSOBKDE1 G ASK1
D:$G(PSOFROM)="NEW"&($G(PSORX("EDIT"))']"")!($G(PSOFROM1))!($G(COPY)) LST^PSOBKDE1:$O(DOSE(0))
ASK1 S STRE=$P($G(DOSE("DD",PSODRUG("IEN"))),"^",5),UNITN=$P($G(DOSE("DD",PSODRUG("IEN"))),"^",6),DOSE("LD")=$P($G(DOSE("DD",PSODRUG("IEN"))),"^",11)
W ! S DIR(0)="F^1:60"
I '$G(PSODOSCT) D
.F I=0:0 S I=$O(DOSE(I)) Q:'I!('$D(DOSE(I))) S PSODOSCT=I
.I PSODOSCT=1,$P(DOSE(1),"^")=""&($P(DOSE("DD",PSODRUG("IEN")),"^",6)="") S PSODOSFL=1
S PSODOSWT="",PSODOSWT=$S($G(PSODOSCT)<1:"",$G(PSODOSCT)=1&($G(PSODOSFL)):"",1:" (1-"_$G(PSODOSCT)_")")
; next 2 lines 402
I PSODOSCT=1,($P($G(DOSE(1)),"^")=""&($P($G(DOSE(1)),"^",3)="")) S PSODOSFL=1
S:$G(PSODOSFL) DIR("A")=" Please Enter a Free Text Dose"
S:'$G(PSODOSFL) DIR("A",1)="Select from list of Available Dosages"_PSODOSWT_", Enter Free Text Dose",DIR("?")="^D LST1^PSOBKDE1",DIR("A")="or Enter a Question Mark (?) to view list"
; PSO*7.0*574 - Defect 1180952 Adding Complex default dose
I $G(PSORXED("DOSE",ENT))]"" S DIR("B")=PSORXED("DOSE",ENT) D
.I $G(PSORXED("UNITS",ENT))]"",DIR("B")'[($P($G(^PS(50.607,PSORXED("UNITS",ENT),0)),"^")) S DIR("B")=DIR("B")_$P($G(^PS(50.607,PSORXED("UNITS",ENT),0)),"^") K:$G(PSOREEDQ)!($G(PSOBDRG)) DIR("B")
D ^DIR
I X[U,$L(X)>1 S FIELD="ASK",JUMP=1 K DIRUT,DTOUT Q
I $D(DIRUT) S:$G(ORD) PSODSPL=1 Q
I X=$G(PSORXED("DOSE",ENT)),$D(DOSE(Y)) S PSORXED("DOSE EDIT")=DOSE(Y) G GD1
I X=$G(PSORXED("DOSE",ENT)) D G DOS
.S DOSE=X,UNITS=$G(PSORXED("UNITS",ENT)),PSORXED("DOSE EDIT")=X
.I $P(DOSE("DD",PSODRUG("IEN")),"^",5) S DUPD=DOSE/$P(DOSE("DD",PSODRUG("IEN")),"^",5),PSORXED("DOSE ORDERED",ENT)=DUPD ;557
.I DOSE'?.N&(DOSE'?.N1".".N)!'DOSE("LD") S (UNITN,UNITS,PSORXED("UNITS",ENT))="" K PSORXED("DOSE ORDERED",ENT),DUPD,PSORXED("NOUN",ENT)
GD1 N PSORXTE
I $D(DOSE(Y)) D G DOS ;from list
.S DOSE=$S($P(DOSE(Y),"^"):$P(DOSE(Y),"^"),$P(DOSE(Y),"^",3)]"":$P(DOSE(Y),"^",3),1:1),DOLST=Y,PSORXED("NEW DOSE")=DOSE
.I $P(DOSE(Y),"^") S UNITS=$P(DOSE(Y),"^",2),DUPD=$P(DOSE(Y),"^",3),UNITN=$P(DOSE("DD",PSODRUG("IEN")),"^",6),PSORXTE("DOSE ORDERED",ENT)=DUPD
.S PSORXTE("NOUN",ENT)=$P(DOSE(Y),"^",6),PSORXTE("VERB",ENT)=$P(DOSE(Y),"^",8)
.I DOSE'?.N&(DOSE'?.N1".".N)!'DOSE("LD") D Q
..S (UNITN,UNITS,PSORXED("UNITS",ENT))="" K PSORXED("DOSE ORDERED",ENT),DUPD,PSORXED("NOUN",ENT)
..I $P($G(^PS(55,PSODFN,"LAN")),"^"),$G(PSOFROM)="PENDING" D LAN^PSOORED5 Q
..I $P($G(^PS(55,PSODFN,"LAN")),"^"),$G(PSOFROM)="NEW" D LAN^PSOORED5
.S PSORXTE("UNITS",ENT)=$G(UNITS)
S DOSE=Y,DOLST=0,PSORXED("DOSE EDIT")=DOSE ;non-numeric and numeric not in list
I DOSE("LD") D
.F I=1:1:$L(DOSE) I $E(DOSE,I)'?.N&($E(DOSE,I)'?1" ")&($E(DOSE,I)'?1".") S DCHK=$G(DCHK)_$E(DOSE,I)
.I $G(DCHK)]"" D
..S DCHK=$TR(DCHK,"qwertyuioplkjhgfdsazxcvbnm","QWERTYUIOPLKJHGFDSAZXCVBNM")
..I DCHK=UNITN S DOSE=+DOSE,PSORXED("DOSE EDIT")=DOSE
K I,DCHK
S PSOINDT=$$GET1^DIQ(50,PSODRUG("IEN"),100,"I") I PSOINDT,DT>PSOINDT G DOS
S PSORXTE("NOUN",ENT)=$P(DOSE("DD",PSODRUG("IEN")),"^",9),PSORXTE("VERB",ENT)=$P(DOSE("DD",PSODRUG("IEN")),"^",10)
I DOSE'?.N&(DOSE'?.N1".".N)!'DOSE("LD") S (UNITN,UNITS,PSORXED("UNITS",ENT))="" K PSORXED("NOUN",ENT),PSORXED("ODOSE",ENT) G DOS
S:$P(DOSE("DD",PSODRUG("IEN")),"^",6)]"" (PSORXTE("UNITS",ENT),UNITS)=$O(^PS(50.607,"B",$P(DOSE("DD",PSODRUG("IEN")),"^",6),0)),UNITN=$P(DOSE("DD",PSODRUG("IEN")),"^",6)
S:$P(DOSE("DD",PSODRUG("IEN")),"^",5) DUPD=DOSE/$P(DOSE("DD",PSODRUG("IEN")),"^",5),PSORXTE("DOSE ORDERED",ENT)=DUPD
DOS W " "_$S($E(DOSE,1)="."&($G(UNITN)'=""):"0",1:"")_DOSE W:$G(UNITN)'="" UNITN
W ! K DIR,DIRUT S DIR(0)="Y",DIR("A")="You entered "_$S($E(DOSE,1)="."&($G(UNITN)'=""):"0",1:"")_DOSE_$S($G(UNITN)'="":UNITN,1:"")_" is this correct",DIR("B")="Yes"
D ^DIR I 'Y D KX K DOSE,UNITS,PSORXTE,PSOINDT G ASK
S PSORXED("DOSE",ENT)=DOSE
S:$G(PSORXTE("DOSE ORDERED",ENT))]"" PSORXED("DOSE ORDERED",ENT)=PSORXTE("DOSE ORDERED",ENT)
S:$G(PSORXTE("NOUN",ENT))]"" PSORXED("NOUN",ENT)=PSORXTE("NOUN",ENT)
I $G(PSORX("EDIT"))']"" D ;PSO*7.0*450
.S:$G(PSORXTE("VERB",ENT))]"" PSORXED("VERB",ENT)=PSORXTE("VERB",ENT)
S:$G(PSORXTE("UNITS",ENT))]"" PSORXED("UNITS",ENT)=PSORXTE("UNITS",ENT)
I $G(PSORXED("DOSE",ENT))'?.N&($G(PSORXED("DOSE",ENT))'?.N1".".N)!'DOSE("LD"),$P($G(^PS(55,PSODFN,"LAN")),"^") D
.K OTHDOS(ENT) D KX S DIR(0)="52.0113,9"
.I '$G(OTHDOS(ENT)),$G(PSORXED("ODOSE",ENT))']"" D LAN^PSOORED5
.I $G(PSORXED("ODOSE",ENT))]"" S DIR("B")=PSORXED("ODOSE",ENT) K:DIR("B")="" DIR("B")
.K DTOUT,DUOUT,DIRUT,Y,X D ^DIR K DIR K:$G(X)="@"!($G(X)="") DIRUT I $D(DIRUT) Q
.I X="@" S OTHDOS(ENT)=1 D KX K PSORXED("ODOSE",ENT) Q
.S:X'="" PSORXED("ODOSE",ENT)=X
Q
;
SCH D KX
;*282 Allow multi-word schedules
S DIR("?")="^D SCHLP^PSOORED4",DIR("A")="Schedule: ",DIR(0)="FA^1:20^I X[""""""""!(X?.E1C.E)!($A(X)=45)!($L(X,"" "")>$S(X[""PRN"":4,1:3))!($L(X)>20)!($L(X)<1) K X"
I '$D(PSOSCH),'$D(PSORXED("SCHEDULE",ENT)),$P(^PS(50.7,PSODRUG("OI"),0),"^",8)]"" S PSOSCH=$P(^PS(50.7,PSODRUG("OI"),0),"^",8)
S DIR("B")=$S($D(PSOSCH)&('$D(PSORXED("SCHEDULE",ENT))):PSOSCH,$G(PSORXED("SCHEDULE",ENT))]"":PSORXED("SCHEDULE",ENT),1:"") K:DIR("B")="" DIR("B")
I $G(PSORXED("SCHEDULE",ENT))']"",$G(PSOREEDT) K DIR("B")
D ^DIR
Q
KX K X,Y
KV K DTOUT,DUOUT,DIR,DIRUT
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSOBKDED 11229 printed Nov 22, 2024@17:34:50 Page 2
PSOBKDED ;BIR/SAB - Edit backdoor Rx Order entry ;Aug 11, 2020@11:13:08
+1 ;;7.0;OUTPATIENT PHARMACY;**11,46,91,78,99,117,133,143,268,378,416,282,450,402,518,525,538,457,557,574,598,441**;DEC 1997;Build 208
+2 ;Ref PS(50.607 IA 2221
+3 ;Ref PS(50.7 IA 2223
+4 ;Ref PS(51.2 IA 2226
+5 ;Ref PSDRUG( IA 221
+6 ;Ref DOSE^PSSORPH IA 3234
+7 ;Ref PS(55 IA 2228
1 SET %DT="AEX"
SET %DT(0)=-PSONEW("FILL DATE")
SET Y=PSONEW("ISSUE DATE")
XECUTE ^DD("DD")
SET %DT("A")="ISSUE DATE: "
SET %DT("B")=Y
DO ^%DT
DO CID^PSOUTL
+1 IF "^"[$EXTRACT(X)
DO KX
KILL %DT
QUIT
+2 ; PSO*7*538 Added Next Line
+3 IF Y=-1
WRITE !
DO CIDH^PSOUTL
WRITE !
GOTO 1
+4 if Y=-1
GOTO 1
SET (PSOID,PSONEW("ISSUE DATE"))=Y
DO KX
KILL %DT
+5 QUIT
2 ;Fdt
SET PSONEW("FLD")=2
DO FILLDT^PSODIR2(.PSONEW)
+1 QUIT
3 if $GET(POERR)
SET PSONEW("ISSUE DATE")=PSOID
+1 ;Sta
SET PSONEW("FLD")=3
DO PTSTAT^PSODIR1(.PSONEW)
+2 QUIT
4 ;Pro
SET PSONEW("FLD")=4
DO PROV^PSODIR(.PSONEW)
+1 QUIT
5 ;Cli
SET PSONEW("FLD")=5
DO CLINIC^PSODIR2(.PSONEW)
+1 QUIT
6 ;Drg/ICD
SET PSONEW("FLD")=6
DO ^PSODRG
DO EN^PSODIAG
+1 DO 6^PSODRGN
+2 QUIT
7 ;Qty
SET PSONEW("FLD")=7
DO QTY^PSODIR1(.PSONEW)
+1 QUIT
8 ;Day
SET PSONEW("FLD")=8
DO DAYS^PSODIR1(.PSONEW)
+1 KILL PSMAX,PSTMAX
DO REF^PSOORNEW
SET PSONEW("N# REF")=PSONEW("# OF REFILLS")
+2 QUIT
9 ;Ref
SET PSONEW("FLD")=9
DO REFILL^PSODIR1(.PSONEW)
+1 KILL PSMAX,PSTMAX
+2 QUIT
10 ;Dose
SET PSONEW("FLD")="3A"
NEW PSOEDDOS
SET PSOEDDOS=1
DO DOSE^PSODIR(.PSONEW)
+1 QUIT
+2 ;
+3 QUIT
IF $GET(COPY)
IF $GET(SIGOK)
SET PSOFDR=1
KILL PSONEW("SIG")
+4 ;Sig
SET PSONEW("FLD")=10
DO SIG^PSODIR1(.PSONEW)
+5 IF $GET(COPY)
KILL PSOFDR
+6 SET DIR(0)="E"
SET DIR("A")="Press Return to Continue"
DO ^DIR
DO KV
+7 QUIT
INS ;Ins
SET PSONEW("FLD")="3B"
DO INS^PSODIR(.PSONEW)
+1 QUIT
11 ;Cop
SET PSONEW("FLD")=11
DO COPIES^PSODIR1(.PSONEW)
+1 QUIT
12 ;M/W
SET PSONEW("FLD")=12
DO MW^PSODIR2(.PSONEW)
+1 QUIT
13 ;Rem
SET PSONEW("FLD")=13
DO RMK^PSODIR2(.PSONEW)
+1 QUIT
DOSE ;backdoor
+1 IF '$GET(PSONEW("ENT"))
SET IEN=IEN+1
SET ^TMP("PSOPO",$JOB,IEN,0)=" (5) Dosage Ordered: "
GOTO INS1
+2 SET SD=1
FOR I=1:1:PSONEW("ENT")
Begin DoDot:1
+3 IF '$GET(PSONEW("DOSE ORDERED",I))
IF $GET(PSONEW("VERB",I))]""
SET IEN=IEN+1
SET ^TMP("PSOPO",$JOB,IEN,0)=" Verb: "_$GET(PSONEW("VERB",I))
+4 if $GET(SD)=1
SET IEN=IEN+1
SET ^TMP("PSOPO",$JOB,IEN,0)=" (5)"
SET DS=1
KILL SD
+5 DO DOSE1
End DoDot:1
INS1 SET IEN=IEN+1
SET ^TMP("PSOPO",$JOB,IEN,0)=" (6)Pat Instruction:"
INS2 IF $ORDER(PSONEW("SIG",0))
FOR D=0:0
SET D=$ORDER(PSONEW("SIG",D))
if 'D
QUIT
Begin DoDot:1
+1 FOR SG=1:1:$LENGTH(PSONEW("SIG",D))
if $LENGTH(^TMP("PSOPO",$JOB,IEN,0)_" "_$PIECE(PSONEW("SIG",D)," ",SG))>80
SET IEN=IEN+1
SET $PIECE(^TMP("PSOPO",$JOB,IEN,0)," ",21)=" "
Begin DoDot:2
+2 if $PIECE(PSONEW("SIG",D)," ",SG)'=""
SET ^TMP("PSOPO",$JOB,IEN,0)=$GET(^TMP("PSOPO",$JOB,IEN,0))_" "_$PIECE(PSONEW("SIG",D)," ",SG)
End DoDot:2
End DoDot:1
+3 IF $PIECE($GET(^PS(55,PSODFN,"LAN")),"^")
Begin DoDot:1
+4 SET IEN=IEN+1
SET ^TMP("PSOPO",$JOB,IEN,0)=" Other Patient Inst.: "
+5 IF $GET(^PSRX(+$GET(PSONEW("OIRXN")),"INSS"))]""
SET PSONEW("SINS")=^PSRX(PSONEW("OIRXN"),"INSS")
+6 SET ^TMP("PSOPO",$JOB,IEN,0)=^TMP("PSOPO",$JOB,IEN,0)_$GET(PSONEW("SINS"))
End DoDot:1
+7 ;*441-IND
SET IEN=IEN+1
SET ^TMP("PSOPO",$JOB,IEN,0)=" Indications: "_$SELECT($GET(PSONEW("IND"))]"":PSONEW("IND"),1:"")
+8 IF $PIECE($GET(^PS(55,PSODFN,"LAN")),"^")
Begin DoDot:1
+9 SET IEN=IEN+1
SET ^TMP("PSOPO",$JOB,IEN,0)=" Other Indications: "_$SELECT($GET(PSONEW("INDO"))]"":PSONEW("INDO"),1:"")
End DoDot:1
+10 QUIT
+11 ;
DOSE1 IF $GET(DS)=1
Begin DoDot:1
+1 SET ^TMP("PSOPO",$JOB,IEN,0)=^TMP("PSOPO",$JOB,IEN,0)_" Dosage Ordered: "_$SELECT(...
... $EXTRACT(PSONEW("DOSE",I),1)="."&($GET(PSONEW("DOSE ORDERED",I))):"0",1:"")_PSONEW("DOSE",I)_$SELECT($GET(PSONEW("UNITS",I))'="":" ("_$PIECE(^PS(50.607,PSONEW("UNITS",I),0),"^")_")",1:"")
End DoDot:1
KILL DS
GOTO DU
+2 SET IEN=IEN+1
SET ^TMP("PSOPO",$JOB,IEN,0)=" Dosage Ordered: "_$SELECT($EXTRACT(PSONEW("DOSE",I),1)="."&($GET(PSONEW("DOSE ORDERED",I))):"0",1:"")_PSONEW("DOSE",I)_$SELECT($GET(PSONEW("UNITS",I))'="":" ("_$PIECE(^PS(50.607,PSONEW("UNITS",I),0),"^")_")",
1:"")
DU IF '$GET(PSONEW("DOSE ORDERED",I))
IF $PIECE($GET(^PS(55,PSODFN,"LAN")),"^")
SET IEN=IEN+1
SET ^TMP("PSOPO",$JOB,IEN,0)=" Oth. Lang. Dosage: "_$GET(PSONEW("ODOSE",I))
+1 IF $GET(PSONEW("DOSE ORDERED",I))
IF $GET(PSONEW("VERB",I))]""
SET IEN=IEN+1
SET ^TMP("PSOPO",$JOB,IEN,0)=" Verb: "_$GET(PSONEW("VERB",I))
+2 if $GET(PSONEW("DOSE ORDERED",I))
SET IEN=IEN+1
SET ^TMP("PSOPO",$JOB,IEN,0)=" Dispense Units: "_$SELECT($EXTRACT($GET(PSONEW("DOSE ORDERED",I)),1)=".":"0",1:"")_$GET(PSONEW("DOSE ORDERED",I))
+3 IF $GET(PSONEW("DOSE ORDERED",I))
IF $GET(PSONEW("NOUN",I))]""
SET IEN=IEN+1
SET ^TMP("PSOPO",$JOB,IEN,0)=" Noun: "_PSONEW("NOUN",I)
+4 IF $GET(PSONEW("ROUTE",I))
SET IEN=IEN+1
SET ^TMP("PSOPO",$JOB,IEN,0)=" Route: "_$PIECE(^PS(51.2,PSONEW("ROUTE",I),0),"^")
+5 SET IEN=IEN+1
SET ^TMP("PSOPO",$JOB,IEN,0)=" Schedule: "_$GET(PSONEW("SCHEDULE",I))
+6 IF $GET(PSONEW("DURATION",I))]""
Begin DoDot:1
+7 SET IEN=IEN+1
+8 SET ^TMP("PSOPO",$JOB,IEN,0)=" *Duration: "_PSONEW("DURATION",I)_" ("_$SELECT(PSONEW("DURATION",I)["M":"MINUTES",PSONEW("DURATION",I)["W":"WEEKS",PSONEW("DURATION",I)["L":"MONTHS",PSONEW("DURATION",I)["H":"HOURS",1:"DAYS")_")"
End DoDot:1
+9 IF $GET(PSONEW("CONJUNCTION",I))]""
SET IEN=IEN+1
SET ^TMP("PSOPO",$JOB,IEN,0)=" Conjunction: "_$SELECT($GET(PSONEW("CONJUNCTION",I))="A":"AND",$GET(PSONEW("CONJUNCTION",I))="T":"THEN",$GET(PSONEW("CONJUNCTION",I))="X":"EXCEPT",1:"")
+10 QUIT
RTE ;*525
+1 IF $GET(DRET)
SET PSORXED("ROUTE",ENT)=""
+2 IF $GET(RTE)
KILL RTE
+3 DO KV
NEW MRSLS,MRX,MRDFV,MRQ
SET MRQ=0
SET MRDFV=$SELECT($GET(PSORXED("ROUTE",ENT)):$PIECE(^PS(51.2,PSORXED("ROUTE",ENT),0),"^"),$GET(RTE)]"":RTE,1:"")
+4 SET X=""
+5 WRITE !,"ROUTE: "_MRDFV_"//"
+6 Begin DoDot:1
+7 READ MRX:DTIME
+8 IF '$TEST
SET DTOUT=1
+9 IF MRX="^"
SET DUOUT=1
+10 IF MRX="?"
DO MRSL^PSOORED5
+11 IF MRX=""
IF $GET(MRDFV)]""
SET MRX=$GET(MRDFV)
End DoDot:1
if $GET(MRSLS)
GOTO RTEC
if MRQ
GOTO RTE
+12 SET X=MRX
+13 KILL MRSLS,MRX,MRDFV,MRQ
+14 IF X[U
IF $LENGTH(X)>1
SET FIELD="RTE"
SET JUMP=1
KILL DIRUT,DTOUT
QUIT
+15 if $DATA(DTOUT)!($DATA(DUOUT))
QUIT
+16 IF X="@"!(X="")
KILL RTE,ERTE
SET DRET=1
SET PSORXED("ROUTE",ENT)=""
QUIT
+17 DO CKMRSL^PSOORED5
+18 KILL DRET
IF X=$PIECE($GET(^PS(51.2,+$GET(PSORXED("ROUTE",ENT)),0)),"^")
SET RTE=$PIECE(^PS(51.2,PSORXED("ROUTE",ENT),0),"^")
SET ERTE=$PIECE(^PS(51.2,PSORXED("ROUTE",ENT),0),"^",2)
WRITE X_" "_$GET(ERTE)
QUIT
RTEC ;
+1 KILL DIC
SET DIC=51.2
SET DIC(0)="QEZMX"
SET DIC("S")="I $P(^(0),""^"",4)"
DO ^DIC
if X[U
QUIT
if Y=-1
GOTO RTE
WRITE " "_$PIECE(Y(0),"^",2)
+2 if X'=""
SET PSORXED("ROUTE",ENT)=+Y
SET RTE=Y(0,0)
SET ERTE=$PIECE(Y(0),"^",2)
+3 QUIT
ASK ;
+1 KILL JUMP,UNITN,DOSE
DO KV
DO DOSE^PSSORPH(.DOSE,PSODRUG("IEN"),"O",PSODFN)
+2 ;402
NEW PSODOSCT,PSODOSFL,PSODOSWT
DO FULL^VALM1
+3 IF $DATA(DOSE("DD"))
DO LST2^PSOBKDE1
GOTO ASK1
+4 if $GET(PSOFROM)="NEW"&($GET(PSORX("EDIT"))']"")!($GET(PSOFROM1))!($GET(COPY))
if $ORDER(DOSE(0))
DO LST^PSOBKDE1
ASK1 SET STRE=$PIECE($GET(DOSE("DD",PSODRUG("IEN"))),"^",5)
SET UNITN=$PIECE($GET(DOSE("DD",PSODRUG("IEN"))),"^",6)
SET DOSE("LD")=$PIECE($GET(DOSE("DD",PSODRUG("IEN"))),"^",11)
+1 WRITE !
SET DIR(0)="F^1:60"
+2 IF '$GET(PSODOSCT)
Begin DoDot:1
+3 FOR I=0:0
SET I=$ORDER(DOSE(I))
if 'I!('$DATA(DOSE(I)))
QUIT
SET PSODOSCT=I
+4 IF PSODOSCT=1
IF $PIECE(DOSE(1),"^")=""&($PIECE(DOSE("DD",PSODRUG("IEN")),"^",6)="")
SET PSODOSFL=1
End DoDot:1
+5 SET PSODOSWT=""
SET PSODOSWT=$SELECT($GET(PSODOSCT)<1:"",$GET(PSODOSCT)=1&($GET(PSODOSFL)):"",1:" (1-"_$GET(PSODOSCT)_")")
+6 ; next 2 lines 402
+7 IF PSODOSCT=1
IF ($PIECE($GET(DOSE(1)),"^")=""&($PIECE($GET(DOSE(1)),"^",3)=""))
SET PSODOSFL=1
+8 if $GET(PSODOSFL)
SET DIR("A")=" Please Enter a Free Text Dose"
+9 if '$GET(PSODOSFL)
SET DIR("A",1)="Select from list of Available Dosages"_PSODOSWT_", Enter Free Text Dose"
SET DIR("?")="^D LST1^PSOBKDE1"
SET DIR("A")="or Enter a Question Mark (?) to view list"
+10 ; PSO*7.0*574 - Defect 1180952 Adding Complex default dose
+11 IF $GET(PSORXED("DOSE",ENT))]""
SET DIR("B")=PSORXED("DOSE",ENT)
Begin DoDot:1
+12 IF $GET(PSORXED("UNITS",ENT))]""
IF DIR("B")'[($PIECE($GET(^PS(50.607,PSORXED("UNITS",ENT),0)),"^"))
SET DIR("B")=DIR("B")_$PIECE($GET(^PS(50.607,PSORXED("UNITS",ENT),0)),"^")
if $GET(PSOREEDQ)!($GET(PSOBDRG))
KILL DIR("B")
End DoDot:1
+13 DO ^DIR
+14 IF X[U
IF $LENGTH(X)>1
SET FIELD="ASK"
SET JUMP=1
KILL DIRUT,DTOUT
QUIT
+15 IF $DATA(DIRUT)
if $GET(ORD)
SET PSODSPL=1
QUIT
+16 IF X=$GET(PSORXED("DOSE",ENT))
IF $DATA(DOSE(Y))
SET PSORXED("DOSE EDIT")=DOSE(Y)
GOTO GD1
+17 IF X=$GET(PSORXED("DOSE",ENT))
Begin DoDot:1
+18 SET DOSE=X
SET UNITS=$GET(PSORXED("UNITS",ENT))
SET PSORXED("DOSE EDIT")=X
+19 ;557
IF $PIECE(DOSE("DD",PSODRUG("IEN")),"^",5)
SET DUPD=DOSE/$PIECE(DOSE("DD",PSODRUG("IEN")),"^",5)
SET PSORXED("DOSE ORDERED",ENT)=DUPD
+20 IF DOSE'?.N&(DOSE'?.N1".".N)!'DOSE("LD")
SET (UNITN,UNITS,PSORXED("UNITS",ENT))=""
KILL PSORXED("DOSE ORDERED",ENT),DUPD,PSORXED("NOUN",ENT)
End DoDot:1
GOTO DOS
GD1 NEW PSORXTE
+1 ;from list
IF $DATA(DOSE(Y))
Begin DoDot:1
+2 SET DOSE=$SELECT($PIECE(DOSE(Y),"^"):$PIECE(DOSE(Y),"^"),$PIECE(DOSE(Y),"^",3)]"":$PIECE(DOSE(Y),"^",3),1:1)
SET DOLST=Y
SET PSORXED("NEW DOSE")=DOSE
+3 IF $PIECE(DOSE(Y),"^")
SET UNITS=$PIECE(DOSE(Y),"^",2)
SET DUPD=$PIECE(DOSE(Y),"^",3)
SET UNITN=$PIECE(DOSE("DD",PSODRUG("IEN")),"^",6)
SET PSORXTE("DOSE ORDERED",ENT)=DUPD
+4 SET PSORXTE("NOUN",ENT)=$PIECE(DOSE(Y),"^",6)
SET PSORXTE("VERB",ENT)=$PIECE(DOSE(Y),"^",8)
+5 IF DOSE'?.N&(DOSE'?.N1".".N)!'DOSE("LD")
Begin DoDot:2
+6 SET (UNITN,UNITS,PSORXED("UNITS",ENT))=""
KILL PSORXED("DOSE ORDERED",ENT),DUPD,PSORXED("NOUN",ENT)
+7 IF $PIECE($GET(^PS(55,PSODFN,"LAN")),"^")
IF $GET(PSOFROM)="PENDING"
DO LAN^PSOORED5
QUIT
+8 IF $PIECE($GET(^PS(55,PSODFN,"LAN")),"^")
IF $GET(PSOFROM)="NEW"
DO LAN^PSOORED5
End DoDot:2
QUIT
+9 SET PSORXTE("UNITS",ENT)=$GET(UNITS)
End DoDot:1
GOTO DOS
+10 ;non-numeric and numeric not in list
SET DOSE=Y
SET DOLST=0
SET PSORXED("DOSE EDIT")=DOSE
+11 IF DOSE("LD")
Begin DoDot:1
+12 FOR I=1:1:$LENGTH(DOSE)
IF $EXTRACT(DOSE,I)'?.N&($EXTRACT(DOSE,I)'?1" ")&($EXTRACT(DOSE,I)'?1".")
SET DCHK=$GET(DCHK)_$EXTRACT(DOSE,I)
+13 IF $GET(DCHK)]""
Begin DoDot:2
+14 SET DCHK=$TRANSLATE(DCHK,"qwertyuioplkjhgfdsazxcvbnm","QWERTYUIOPLKJHGFDSAZXCVBNM")
+15 IF DCHK=UNITN
SET DOSE=+DOSE
SET PSORXED("DOSE EDIT")=DOSE
End DoDot:2
End DoDot:1
+16 KILL I,DCHK
+17 SET PSOINDT=$$GET1^DIQ(50,PSODRUG("IEN"),100,"I")
IF PSOINDT
IF DT>PSOINDT
GOTO DOS
+18 SET PSORXTE("NOUN",ENT)=$PIECE(DOSE("DD",PSODRUG("IEN")),"^",9)
SET PSORXTE("VERB",ENT)=$PIECE(DOSE("DD",PSODRUG("IEN")),"^",10)
+19 IF DOSE'?.N&(DOSE'?.N1".".N)!'DOSE("LD")
SET (UNITN,UNITS,PSORXED("UNITS",ENT))=""
KILL PSORXED("NOUN",ENT),PSORXED("ODOSE",ENT)
GOTO DOS
+20 if $PIECE(DOSE("DD",PSODRUG("IEN")),"^",6)]""
SET (PSORXTE("UNITS",ENT),UNITS)=$ORDER(^PS(50.607,"B",$PIECE(DOSE("DD",PSODRUG("IEN")),"^",6),0))
SET UNITN=$PIECE(DOSE("DD",PSODRUG("IEN")),"^",6)
+21 if $PIECE(DOSE("DD",PSODRUG("IEN")),"^",5)
SET DUPD=DOSE/$PIECE(DOSE("DD",PSODRUG("IEN")),"^",5)
SET PSORXTE("DOSE ORDERED",ENT)=DUPD
DOS WRITE " "_$SELECT($EXTRACT(DOSE,1)="."&($GET(UNITN)'=""):"0",1:"")_DOSE
if $GET(UNITN)'=""
WRITE UNITN
+1 WRITE !
KILL DIR,DIRUT
SET DIR(0)="Y"
SET DIR("A")="You entered "_$SELECT($EXTRACT(DOSE,1)="."&($GET(UNITN)'=""):"0",1:"")_DOSE_$SELECT($GET(UNITN)'="":UNITN,1:"")_" is this correct"
SET DIR("B")="Yes"
+2 DO ^DIR
IF 'Y
DO KX
KILL DOSE,UNITS,PSORXTE,PSOINDT
GOTO ASK
+3 SET PSORXED("DOSE",ENT)=DOSE
+4 if $GET(PSORXTE("DOSE ORDERED",ENT))]""
SET PSORXED("DOSE ORDERED",ENT)=PSORXTE("DOSE ORDERED",ENT)
+5 if $GET(PSORXTE("NOUN",ENT))]""
SET PSORXED("NOUN",ENT)=PSORXTE("NOUN",ENT)
+6 ;PSO*7.0*450
IF $GET(PSORX("EDIT"))']""
Begin DoDot:1
+7 if $GET(PSORXTE("VERB",ENT))]""
SET PSORXED("VERB",ENT)=PSORXTE("VERB",ENT)
End DoDot:1
+8 if $GET(PSORXTE("UNITS",ENT))]""
SET PSORXED("UNITS",ENT)=PSORXTE("UNITS",ENT)
+9 IF $GET(PSORXED("DOSE",ENT))'?.N&($GET(PSORXED("DOSE",ENT))'?.N1".".N)!'DOSE("LD")
IF $PIECE($GET(^PS(55,PSODFN,"LAN")),"^")
Begin DoDot:1
+10 KILL OTHDOS(ENT)
DO KX
SET DIR(0)="52.0113,9"
+11 IF '$GET(OTHDOS(ENT))
IF $GET(PSORXED("ODOSE",ENT))']""
DO LAN^PSOORED5
+12 IF $GET(PSORXED("ODOSE",ENT))]""
SET DIR("B")=PSORXED("ODOSE",ENT)
if DIR("B")=""
KILL DIR("B")
+13 KILL DTOUT,DUOUT,DIRUT,Y,X
DO ^DIR
KILL DIR
if $GET(X)="@"!($GET(X)="")
KILL DIRUT
IF $DATA(DIRUT)
QUIT
+14 IF X="@"
SET OTHDOS(ENT)=1
DO KX
KILL PSORXED("ODOSE",ENT)
QUIT
+15 if X'=""
SET PSORXED("ODOSE",ENT)=X
End DoDot:1
+16 QUIT
+17 ;
SCH DO KX
+1 ;*282 Allow multi-word schedules
+2 SET DIR("?")="^D SCHLP^PSOORED4"
SET DIR("A")="Schedule: "
SET DIR(0)="FA^1:20^I X[""""""""!(X?.E1C.E)!($A(X)=45)!($L(X,"" "")>$S(X[""PRN"":4,1:3))!($L(X)>20)!($L(X)<1) K X"
+3 IF '$DATA(PSOSCH)
IF '$DATA(PSORXED("SCHEDULE",ENT))
IF $PIECE(^PS(50.7,PSODRUG("OI"),0),"^",8)]""
SET PSOSCH=$PIECE(^PS(50.7,PSODRUG("OI"),0),"^",8)
+4 SET DIR("B")=$SELECT($DATA(PSOSCH)&('$DATA(PSORXED("SCHEDULE",ENT))):PSOSCH,$GET(PSORXED("SCHEDULE",ENT))]"":PSORXED("SCHEDULE",ENT),1:"")
if DIR("B")=""
KILL DIR("B")
+5 IF $GET(PSORXED("SCHEDULE",ENT))']""
IF $GET(PSOREEDT)
KILL DIR("B")
+6 DO ^DIR
+7 QUIT
KX KILL X,Y
KV KILL DTOUT,DUOUT,DIR,DIRUT
+1 QUIT