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

PSOORED4.m

Go to the documentation of this file.
  1. PSOORED4 ;BIR/SAB - Edit front door dosing ;07/13/00
  1. ;;7.0;OUTPATIENT PHARMACY;**46,91,78,99,111,117,133,159,148,251,391,372,416,313,437,282,402,515,507,574**;DEC 1997;Build 53
  1. ;External reference ^PS(51 supported by DBIA 2224
  1. ;External reference to PS(51.2 supported by DBIA 2226
  1. ;External reference to PS(51.1 supported by DBIA 2225
  1. ;called from psoornew
  1. ;
  1. DOSE(PSORXED) ;
  1. I '$G(PSODRUG("IEN")) W !,"DRUG NAME REQUIRED!" D 2^PSOORNW1 I '$G(PSODRUG("IEN")) S VALMSG="No Dispense Drug Selected" Q
  1. K ROU,STRE,UNITN,PSODOSE M PSODOSE=PSORXED
  1. D KV K FIELD,DOSEOR,DUPD,X,Y,UNITS S ENT=1,OLENT=$G(PSORXED("ENT"))
  1. ASK I $G(ORD) W !!,"Possible SIG: " D
  1. .;Coded only for outside orders with no Patient Instructions
  1. .I $O(SIG(""))="",$G(ORD),$P($G(^PS(52.41,ORD,"EXT")),"^")'="" D SIGS^PSOHCPRS
  1. .S INST=0 F S INST=$O(SIG(INST)) Q:'INST S MIG=SIG(INST) D
  1. ..F SG=1:1:$L(MIG," ") W:$X+$L($P(MIG," ",SG)_" ")>IOM !?14 W $P(MIG," ",SG)_" "
  1. K SG,INST,MIG
  1. S ROU="PSOORED4",II=ENT D ASK^PSOBKDED K ROU,II I $G(JUMP) K JUMP G JUMP
  1. G:$D(DIRUT) EXQ
  1. ;
  1. I $G(VERB)]"" S PSORXED("VERB",ENT)=VERB G DUPD
  1. VER D VER^PSOOREDX I X[U,$L(X)>1 S FIELD="VER" G JUMP
  1. G:$D(DTOUT)!($D(DUOUT)) EXQ
  1. I X="@" K PSORXED("VERB",ENT),VERB G DUPD
  1. S:X'="" (PSORXED("VERB",ENT),VERB)=X
  1. DUPD ;
  1. I $G(PSORXED("DOSE",ENT))'?.N&($G(PSORXED("DOSE",ENT))'?.N1".".N)!'DOSE("LD") K PSORXED("DOSE ORDERED",ENT),DUPD G NOU1
  1. D DUPD^PSOOREDX
  1. S DIR("B")=$S($G(PSORXED("DOSE ORDERED",ENT))]"":PSORXED("DOSE ORDERED",ENT),1:1) S:$E($G(DIR("B")),1)="." DIR("B")="0"_$G(DIR("B")) K:DIR("B")="" DIR("B")
  1. D ^DIR I X[U,$L(X)>1 S FIELD="DUPD" G JUMP
  1. G:$D(DTOUT)!($D(DUOUT)) EXQ
  1. I X="@"!(X=0) W !,"Dispense Units Per Dose is Required!!",! G DUPD
  1. D STR^PSOOREDX
  1. NOU1 G:'$G(PSORXED("DOSE ORDERED",ENT)) RTE
  1. D CNON^PSOORED3
  1. N PSONDEF
  1. I $G(NOUN)]"" S PSORXED("NOUN",ENT)=NOUN
  1. NOU D NOU^PSOOREDX I X[U,$L(X)>1 S FIELD="NOU" G JUMP
  1. G:$D(DTOUT)!($D(DUOUT)) EXQ
  1. I X="@" K PSORXED("NOUN",ENT),NOUN G RTE
  1. I X'="",$G(PSONDEF)="" S NOUN=X
  1. I X'="",$G(PSONDEF)'=X S NOUN=X
  1. S:X'="" PSORXED("NOUN",ENT)=X
  1. ;
  1. RTE K JUMP S ROU="PSOORED4" D RTE^PSOBKDED K ROU
  1. I $G(JUMP) K JUMP G JUMP
  1. G:$D(DTOUT)!($D(DUOUT)) EXQ
  1. ;
  1. SCH D SCH^PSOBKDED I X[U,$L(X)>1 S FIELD="SCH" G JUMP
  1. G:$D(DTOUT)!($D(DUOUT)) EXQ
  1. S SCH=$$SCHASL^PSOORED5(Y) D SCH^PSOSIG I $G(SCH)']""!($D(DTOUT))!($D(DUOUT)) G SCH
  1. S PSORXED("SCHEDULE",ENT)=SCH IF $G(SCHEX)'="" W " ("_SCHEX_")"
  1. K SCH,SCHEX,X,Y,PSOSCH
  1. S:$G(PSORXED("ENT"))<ENT PSORXED("ENT")=ENT
  1. ;
  1. DUR D KV K EXP
  1. ; PSO*7.0*574 - skip limited duration field for clozapine order
  1. I $P($G(^PSDRUG(PSODRUG("IEN"),"CLOZ1")),U)="PSOCLO1" G CON
  1. S DIR(0)="52.0113,4",DIR("A")="LIMITED DURATION (IN DAYS, HOURS OR MINUTES)"
  1. S DIR("B")=$S($G(PSORXED("DURATION",ENT))]"":PSORXED("DURATION",ENT),1:"") K:DIR("B")="" DIR("B")
  1. D ^DIR I X[U,$L(X)>1 S FIELD="DUR" G JUMP
  1. G:$D(DTOUT)!($D(DUOUT)) EXQ
  1. D DUR1^PSOOREDX
  1. ;
  1. CON D CON^PSOOREDX I X[U,$L(X)>1 S FIELD="CON" G JUMP
  1. G:$D(DTOUT)!($D(DUOUT)) EXQ
  1. I X="@",$G(PSORXED("CONJUNCTION",ENT))="" W !,?10,"Invalid Entry - nothing to delete!!" G CON
  1. S:X'=""&(X'="@") PSORXED("CONJUNCTION",ENT)=Y
  1. I X="@",$D(PSORXED("CONJUNCTION",ENT)) D CON1^PSOOREDX G:$D(DIRUT) EXQ G:'Y CON N CKX S CKX=1 D UPD^PSOOREDX G CON
  1. ;
  1. N PSODLBD4 S PSOSAVX=X,PSODLBD4=1
  1. ;*437
  1. I '$$DUROK^PSOORED3(.PSORXED,ENT) D G DUR
  1. . W !!,"Duration is required for the dosage entered prior to the THEN conjunction.",$C(7),!
  1. I $G(PSORXED("CONJUNCTION",ENT))]"" S PSOCKCON=1 D DCHK1^PSODOSUT G:$G(PSONEW("DFLG")) EX S ENT=ENT+1 K DIR G ASK
  1. E K PSOCKCON D DCHK1^PSODOSUT I $D(DTOUT)!($D(DUOUT)) S PSORX("DFLG")=1,PSONEW("DFLG")=1 G EX ;don't need to print the full summary, just the last sequence.
  1. I PSOSAVX="",$G(PSORXED) K PSOCKCON,PSOEDDOS
  1. K PSOSAVX
  1. ;
  1. S X=$G(PSORXED("INS")) D SIG^PSOHELP S:$G(INS1)]"" PSORXED("SIG")=$E(INS1,2,9999999)
  1. D EN^PSOFSIG(.PSORXED),VERI I $G(CKX),'$G(PSOSIGFL) D MP1 K CKX
  1. I $G(PSOSIGFL)=1 D I '$G(PSOSIGFL) Q
  1. .I $D(OR0),$P(OR0,"^",24)=1 S VALMSG="Digitally Signed Order - No such changes allowed." K PSORXED,PSOSIGFL M PSORXED=PSODOSE D EN^PSOFSIG(.PSORXED) D Q
  1. ..I $D(PSOBDR) K PSODRUG M PSODRUG=PSOBDR K PSOBDR,PSOBDRG
  1. .S PSORXED("ENT")=ENT,SIGOK=1,VALMSG="This change will create a new prescription!",NCPDPFLG=1
  1. K QTYHLD S:$G(PSORXED("QTY")) QTYHLD=PSORXED("QTY") D QTY^PSOSIG(.PSORXED) I $G(PSORXED("QTY")) S QTY=1
  1. I $G(QTYHLD),'$G(PSORXED("QTY")) S PSORXED("QTY")=QTYHLD
  1. K QTYHLD
  1. I '$G(PSORXED("QTY")),$P(OR0,"^",10) S PSORXED("QTY")=$P(OR0,"^",10)
  1. EX ;
  1. K PSOBDR,PSOBDRG,PSOSCH,DUPD,STRE,UNITN,SCH,VERB,NOUN,DOSEOR,RTE,DUR,X,Y,ENTS,PSODOSE,OLENT,FIELD,FLDNM,AR,NM,ENT,STRE,UNITN,PSODOSE,ERTE,ROU
  1. KV K DTOUT,DUOUT,DIR,DIRUT
  1. Q
  1. EXQ ;
  1. K PSORXED,PSOSIGFL M PSORXED=PSODOSE D EN^PSOFSIG(.PSORXED) D MP1
  1. I $D(PSOBDR) M PSODRUG=PSOBDR K PSOBDR,PSOBDRG
  1. G EX Q
  1. MP1 D MP1^PSOOREDX
  1. Q
  1. VERI ;checks for changes to dosing instructions
  1. S ENTS=0
  1. F I=0:0 S I=$O(PSORXED("DOSE",I)) Q:'I S ENTS=$G(ENTS)+1
  1. I ENTS<OLENT!(ENTS>OLENT) S PSOSIGFL=1 Q
  1. F I=1:1:OLENT D
  1. .I +PSODOSE("DOSE",I)'=$G(PSORXED("DOSE",I)) S PSOSIGFL=1
  1. .I $G(PSODOSE("DURATION",I))]"" D
  1. ..S DURATION=$S($E(PSODOSE("DURATION",I),1)'?.N:$E(PSODOSE("DURATION",I),2,99)_$E(PSODOSE("DURATION",I),1),1:PSODOSE("DURATION",I))
  1. ..I +DURATION'=+$G(PSORXED("DURATION",I)) S PSOSIGFL=1
  1. .I $G(PSODOSE("CONJUNCTION",I))'=$G(PSORXED("CONJUNCTION",I)) S PSOSIGFL=1
  1. .I PSODOSE("ROUTE",I)'=$G(PSORXED("ROUTE",I)) S PSOSIGFL=1
  1. .I PSODOSE("SCHEDULE",I)'=$G(PSORXED("SCHEDULE",I)) S PSOSIGFL=1
  1. K DURATION Q
  1. JUMP ;jump to fields
  1. I $L($E(X,2,99))<3 W !,"Field Name Must Be At Least 3 Characters in Length",! G @FIELD
  1. D FNM^PSOOREDX
  1. I FLDNM']"" K X,NM,FLDNM W !,"INVALID FIELD NAME. PLEASE TRY AGAIN!",! G @FIELD
  1. F AR=1:1:PSORXED("ENT") W !,AR_". "_$P(FLDNM,"^",2)_": "_$S(NM="ROU"&($G(PSORXED($P(FLDNM,"^"),AR))):$P(^PS(51.2,PSORXED($P(FLDNM,"^"),AR),0),"^"),1:$G(PSORXED($P(FLDNM,"^"),AR))) S AR1=AR
  1. D KV S DIR("A",1)="* Indicates which fields will create a New Order",DIR("A")="Select Field to Edit by number",DIR(0)="NO^1:"_AR1 D ^DIR G:$D(DIRUT) @FIELD
  1. D JFN^PSOOREDX G:FLDNM="" @FIELD G @FLDNM
  1. G EX
  1. Q
  1. HLP ;help text for med route
  1. D FULL^VALM1 W !,"Please enter how patient will use the medication!"
  1. S DIC=51.2,X="??",DIC(0)="M",DIC("S")="I $P(^PS(51.2,+Y,0),""^"",4)" D ^DIC K DIC,X,Y
  1. Q
  1. SCHLP ;
  1. D FULL^VALM1 W !,"You can choose an entry from the Administration Schedule File (#51.1),",!,"Medication Instruction File (#51) or enter free text."
  1. W !,"The free text entry cannot contain more than 2 spaces or be greater than 20",!,"characters in length."
  1. W ! S DIR(0)="S^A:Administration Schedule File;M:Medication Instruction File;B:Both;F:Free Text",DIR("B")="Both"
  1. S DIR("A")="Do you want to list from" D ^DIR I Y="F"!($G(DIRUT)) K X,Y G X
  1. S LBL=Y G @LBL
  1. A ;display 51.1 entries only
  1. B K X,Y,DIC S X="??",DIC="^PS(51.1,",DIC(0)="QESMVZ",DIC("W")="D DICW^PSOORED4",D="APPSJ^D" W ! D MIX^DIC1
  1. K DIC,X I LBL="A"!($G(DTOUT)) K LBL G X
  1. I Y=-1!($G(DUOUT)) K DIR,DTOUT,DUOUT S DIR(0)="Y",DIR("B")="No",DIR("A")="Do you want to continue with the Medication Instruction File"
  1. D ^DIR I 'Y!($G(DTOUT)) K DIR,X,Y G X
  1. M K X,Y,DIC S DIC=51,X="??",DIC(0)="M" D ^DIC K DIC,X,Y,DTOUT,DUOUT,LBL
  1. ;*282 Allow multi-word schedules
  1. X 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. 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. Q
  1. DICW ;
  1. S Z=$P(^PS(51.1,+Y,0),"^",5),Z=$S(Z="O":-1,Z="S":1,Z="R":-2,1:0) W:Z " ",$S(Z>0:"SHIFT",Z=-2:"RANGE",1:"ONE-TIME")
  1. I Z'<0,$D(PSJW),$D(^(PSJPP'="PSJ"+1,PSJW,0)),$P(^(0),"^",Z+2)]"" W " ",$P(^(0),"^",Z+2)
  1. ;Naked reference on DICW+2 is from DICW+1, ^PS(51.1,+Y,0)
  1. W:+Y $S($P(^(0),U,12):" **INACTIVE**",1:"") ;*507
  1. Q