Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: PSOBKDED

PSOBKDED.m

Go to the documentation of this file.
  1. 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
  1. ;Ref PS(50.607 IA 2221
  1. ;Ref PS(50.7 IA 2223
  1. ;Ref PS(51.2 IA 2226
  1. ;Ref PSDRUG( IA 221
  1. ;Ref DOSE^PSSORPH IA 3234
  1. ;Ref PS(55 IA 2228
  1. 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
  1. I "^"[$E(X) D KX K %DT Q
  1. ; PSO*7*538 Added Next Line
  1. I Y=-1 W ! D CIDH^PSOUTL W ! G 1
  1. G:Y=-1 1 S (PSOID,PSONEW("ISSUE DATE"))=Y D KX K %DT
  1. Q
  1. 2 S PSONEW("FLD")=2 D FILLDT^PSODIR2(.PSONEW) ;Fdt
  1. Q
  1. 3 S:$G(POERR) PSONEW("ISSUE DATE")=PSOID
  1. S PSONEW("FLD")=3 D PTSTAT^PSODIR1(.PSONEW) ;Sta
  1. Q
  1. 4 S PSONEW("FLD")=4 D PROV^PSODIR(.PSONEW) ;Pro
  1. Q
  1. 5 S PSONEW("FLD")=5 D CLINIC^PSODIR2(.PSONEW) ;Cli
  1. Q
  1. 6 S PSONEW("FLD")=6 D ^PSODRG,EN^PSODIAG ;Drg/ICD
  1. D 6^PSODRGN
  1. Q
  1. 7 S PSONEW("FLD")=7 D QTY^PSODIR1(.PSONEW) ;Qty
  1. Q
  1. 8 S PSONEW("FLD")=8 D DAYS^PSODIR1(.PSONEW) ;Day
  1. K PSMAX,PSTMAX D REF^PSOORNEW S PSONEW("N# REF")=PSONEW("# OF REFILLS")
  1. Q
  1. 9 S PSONEW("FLD")=9 D REFILL^PSODIR1(.PSONEW) ;Ref
  1. K PSMAX,PSTMAX
  1. Q
  1. 10 S PSONEW("FLD")="3A" N PSOEDDOS S PSOEDDOS=1 D DOSE^PSODIR(.PSONEW) ;Dose
  1. Q
  1. ;
  1. Q I $G(COPY),$G(SIGOK) S PSOFDR=1 K PSONEW("SIG")
  1. S PSONEW("FLD")=10 D SIG^PSODIR1(.PSONEW) ;Sig
  1. I $G(COPY) K PSOFDR
  1. S DIR(0)="E",DIR("A")="Press Return to Continue" D ^DIR D KV
  1. Q
  1. INS S PSONEW("FLD")="3B" D INS^PSODIR(.PSONEW) ;Ins
  1. Q
  1. 11 S PSONEW("FLD")=11 D COPIES^PSODIR1(.PSONEW) ;Cop
  1. Q
  1. 12 S PSONEW("FLD")=12 D MW^PSODIR2(.PSONEW) ;M/W
  1. Q
  1. 13 S PSONEW("FLD")=13 D RMK^PSODIR2(.PSONEW) ;Rem
  1. Q
  1. DOSE ;backdoor
  1. I '$G(PSONEW("ENT")) S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" (5) Dosage Ordered: " G INS1
  1. S SD=1 F I=1:1:PSONEW("ENT") D
  1. .I '$G(PSONEW("DOSE ORDERED",I)),$G(PSONEW("VERB",I))]"" S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" Verb: "_$G(PSONEW("VERB",I))
  1. .S:$G(SD)=1 IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" (5)",DS=1 K SD
  1. .D DOSE1
  1. INS1 S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" (6)Pat Instruction:"
  1. INS2 I $O(PSONEW("SIG",0)) F D=0:0 S D=$O(PSONEW("SIG",D)) Q:'D D
  1. .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
  1. ..S:$P(PSONEW("SIG",D)," ",SG)'="" ^TMP("PSOPO",$J,IEN,0)=$G(^TMP("PSOPO",$J,IEN,0))_" "_$P(PSONEW("SIG",D)," ",SG)
  1. I $P($G(^PS(55,PSODFN,"LAN")),"^") D
  1. .S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" Other Patient Inst.: "
  1. .I $G(^PSRX(+$G(PSONEW("OIRXN")),"INSS"))]"" S PSONEW("SINS")=^PSRX(PSONEW("OIRXN"),"INSS")
  1. .S ^TMP("PSOPO",$J,IEN,0)=^TMP("PSOPO",$J,IEN,0)_$G(PSONEW("SINS"))
  1. S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" Indications: "_$S($G(PSONEW("IND"))]"":PSONEW("IND"),1:"") ;*441-IND
  1. I $P($G(^PS(55,PSODFN,"LAN")),"^") D
  1. . S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" Other Indications: "_$S($G(PSONEW("INDO"))]"":PSONEW("INDO"),1:"")
  1. Q
  1. ;
  1. DOSE1 I $G(DS)=1 D K DS G DU
  1. .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:"")
  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:"")
  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))
  1. I $G(PSONEW("DOSE ORDERED",I)),$G(PSONEW("VERB",I))]"" S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" Verb: "_$G(PSONEW("VERB",I))
  1. 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))
  1. I $G(PSONEW("DOSE ORDERED",I)),$G(PSONEW("NOUN",I))]"" S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" Noun: "_PSONEW("NOUN",I)
  1. I $G(PSONEW("ROUTE",I)) S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" Route: "_$P(^PS(51.2,PSONEW("ROUTE",I),0),"^")
  1. S IEN=IEN+1,^TMP("PSOPO",$J,IEN,0)=" Schedule: "_$G(PSONEW("SCHEDULE",I))
  1. I $G(PSONEW("DURATION",I))]"" D
  1. .S IEN=IEN+1
  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")_")"
  1. 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:"")
  1. Q
  1. RTE ;*525
  1. I $G(DRET) S PSORXED("ROUTE",ENT)=""
  1. I $G(RTE) K RTE
  1. 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:"")
  1. S X=""
  1. W !,"ROUTE: "_MRDFV_"//"
  1. D G:$G(MRSLS) RTEC G:MRQ RTE
  1. . R MRX:DTIME
  1. . I '$T S DTOUT=1
  1. . I MRX="^" S DUOUT=1
  1. . I MRX="?" D MRSL^PSOORED5
  1. . I MRX="",$G(MRDFV)]"" S MRX=$G(MRDFV)
  1. S X=MRX
  1. K MRSLS,MRX,MRDFV,MRQ
  1. I X[U,$L(X)>1 S FIELD="RTE",JUMP=1 K DIRUT,DTOUT Q
  1. Q:$D(DTOUT)!($D(DUOUT))
  1. I X="@"!(X="") K RTE,ERTE S DRET=1,PSORXED("ROUTE",ENT)="" Q
  1. D CKMRSL^PSOORED5
  1. 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
  1. RTEC ;
  1. 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)
  1. S:X'="" PSORXED("ROUTE",ENT)=+Y,RTE=Y(0,0),ERTE=$P(Y(0),"^",2)
  1. Q
  1. ASK ;
  1. K JUMP,UNITN,DOSE D KV D DOSE^PSSORPH(.DOSE,PSODRUG("IEN"),"O",PSODFN)
  1. N PSODOSCT,PSODOSFL,PSODOSWT D FULL^VALM1 ;402
  1. I $D(DOSE("DD")) D LST2^PSOBKDE1 G ASK1
  1. D:$G(PSOFROM)="NEW"&($G(PSORX("EDIT"))']"")!($G(PSOFROM1))!($G(COPY)) LST^PSOBKDE1:$O(DOSE(0))
  1. 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)
  1. W ! S DIR(0)="F^1:60"
  1. I '$G(PSODOSCT) D
  1. .F I=0:0 S I=$O(DOSE(I)) Q:'I!('$D(DOSE(I))) S PSODOSCT=I
  1. .I PSODOSCT=1,$P(DOSE(1),"^")=""&($P(DOSE("DD",PSODRUG("IEN")),"^",6)="") S PSODOSFL=1
  1. S PSODOSWT="",PSODOSWT=$S($G(PSODOSCT)<1:"",$G(PSODOSCT)=1&($G(PSODOSFL)):"",1:" (1-"_$G(PSODOSCT)_")")
  1. ; next 2 lines 402
  1. I PSODOSCT=1,($P($G(DOSE(1)),"^")=""&($P($G(DOSE(1)),"^",3)="")) S PSODOSFL=1
  1. S:$G(PSODOSFL) DIR("A")=" Please Enter a Free Text Dose"
  1. 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"
  1. ; PSO*7.0*574 - Defect 1180952 Adding Complex default dose
  1. I $G(PSORXED("DOSE",ENT))]"" S DIR("B")=PSORXED("DOSE",ENT) D
  1. .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")
  1. D ^DIR
  1. I X[U,$L(X)>1 S FIELD="ASK",JUMP=1 K DIRUT,DTOUT Q
  1. I $D(DIRUT) S:$G(ORD) PSODSPL=1 Q
  1. I X=$G(PSORXED("DOSE",ENT)),$D(DOSE(Y)) S PSORXED("DOSE EDIT")=DOSE(Y) G GD1
  1. I X=$G(PSORXED("DOSE",ENT)) D G DOS
  1. .S DOSE=X,UNITS=$G(PSORXED("UNITS",ENT)),PSORXED("DOSE EDIT")=X
  1. .I $P(DOSE("DD",PSODRUG("IEN")),"^",5) S DUPD=DOSE/$P(DOSE("DD",PSODRUG("IEN")),"^",5),PSORXED("DOSE ORDERED",ENT)=DUPD ;557
  1. .I DOSE'?.N&(DOSE'?.N1".".N)!'DOSE("LD") S (UNITN,UNITS,PSORXED("UNITS",ENT))="" K PSORXED("DOSE ORDERED",ENT),DUPD,PSORXED("NOUN",ENT)
  1. GD1 N PSORXTE
  1. I $D(DOSE(Y)) D G DOS ;from list
  1. .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
  1. .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
  1. .S PSORXTE("NOUN",ENT)=$P(DOSE(Y),"^",6),PSORXTE("VERB",ENT)=$P(DOSE(Y),"^",8)
  1. .I DOSE'?.N&(DOSE'?.N1".".N)!'DOSE("LD") D Q
  1. ..S (UNITN,UNITS,PSORXED("UNITS",ENT))="" K PSORXED("DOSE ORDERED",ENT),DUPD,PSORXED("NOUN",ENT)
  1. ..I $P($G(^PS(55,PSODFN,"LAN")),"^"),$G(PSOFROM)="PENDING" D LAN^PSOORED5 Q
  1. ..I $P($G(^PS(55,PSODFN,"LAN")),"^"),$G(PSOFROM)="NEW" D LAN^PSOORED5
  1. .S PSORXTE("UNITS",ENT)=$G(UNITS)
  1. S DOSE=Y,DOLST=0,PSORXED("DOSE EDIT")=DOSE ;non-numeric and numeric not in list
  1. I DOSE("LD") D
  1. .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)
  1. .I $G(DCHK)]"" D
  1. ..S DCHK=$TR(DCHK,"qwertyuioplkjhgfdsazxcvbnm","QWERTYUIOPLKJHGFDSAZXCVBNM")
  1. ..I DCHK=UNITN S DOSE=+DOSE,PSORXED("DOSE EDIT")=DOSE
  1. K I,DCHK
  1. S PSOINDT=$$GET1^DIQ(50,PSODRUG("IEN"),100,"I") I PSOINDT,DT>PSOINDT G DOS
  1. S PSORXTE("NOUN",ENT)=$P(DOSE("DD",PSODRUG("IEN")),"^",9),PSORXTE("VERB",ENT)=$P(DOSE("DD",PSODRUG("IEN")),"^",10)
  1. I DOSE'?.N&(DOSE'?.N1".".N)!'DOSE("LD") S (UNITN,UNITS,PSORXED("UNITS",ENT))="" K PSORXED("NOUN",ENT),PSORXED("ODOSE",ENT) G DOS
  1. 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)
  1. S:$P(DOSE("DD",PSODRUG("IEN")),"^",5) DUPD=DOSE/$P(DOSE("DD",PSODRUG("IEN")),"^",5),PSORXTE("DOSE ORDERED",ENT)=DUPD
  1. DOS W " "_$S($E(DOSE,1)="."&($G(UNITN)'=""):"0",1:"")_DOSE W:$G(UNITN)'="" UNITN
  1. 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"
  1. D ^DIR I 'Y D KX K DOSE,UNITS,PSORXTE,PSOINDT G ASK
  1. S PSORXED("DOSE",ENT)=DOSE
  1. S:$G(PSORXTE("DOSE ORDERED",ENT))]"" PSORXED("DOSE ORDERED",ENT)=PSORXTE("DOSE ORDERED",ENT)
  1. S:$G(PSORXTE("NOUN",ENT))]"" PSORXED("NOUN",ENT)=PSORXTE("NOUN",ENT)
  1. I $G(PSORX("EDIT"))']"" D ;PSO*7.0*450
  1. .S:$G(PSORXTE("VERB",ENT))]"" PSORXED("VERB",ENT)=PSORXTE("VERB",ENT)
  1. S:$G(PSORXTE("UNITS",ENT))]"" PSORXED("UNITS",ENT)=PSORXTE("UNITS",ENT)
  1. I $G(PSORXED("DOSE",ENT))'?.N&($G(PSORXED("DOSE",ENT))'?.N1".".N)!'DOSE("LD"),$P($G(^PS(55,PSODFN,"LAN")),"^") D
  1. .K OTHDOS(ENT) D KX S DIR(0)="52.0113,9"
  1. .I '$G(OTHDOS(ENT)),$G(PSORXED("ODOSE",ENT))']"" D LAN^PSOORED5
  1. .I $G(PSORXED("ODOSE",ENT))]"" S DIR("B")=PSORXED("ODOSE",ENT) K:DIR("B")="" DIR("B")
  1. .K DTOUT,DUOUT,DIRUT,Y,X D ^DIR K DIR K:$G(X)="@"!($G(X)="") DIRUT I $D(DIRUT) Q
  1. .I X="@" S OTHDOS(ENT)=1 D KX K PSORXED("ODOSE",ENT) Q
  1. .S:X'="" PSORXED("ODOSE",ENT)=X
  1. Q
  1. ;
  1. SCH D KX
  1. ;*282 Allow multi-word schedules
  1. 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"
  1. 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)
  1. S DIR("B")=$S($D(PSOSCH)&('$D(PSORXED("SCHEDULE",ENT))):PSOSCH,$G(PSORXED("SCHEDULE",ENT))]"":PSORXED("SCHEDULE",ENT),1:"") K:DIR("B")="" DIR("B")
  1. I $G(PSORXED("SCHEDULE",ENT))']"",$G(PSOREEDT) K DIR("B")
  1. D ^DIR
  1. Q
  1. KX K X,Y
  1. KV K DTOUT,DUOUT,DIR,DIRUT
  1. Q