| 1 | PSJUTL ;BIR/MLM-MISC. INPATIENT UTILITIES ;17 Mar 98 / 11:05 AM
 | 
|---|
| 2 |  ;;5.0; INPATIENT MEDICATIONS ;**9,47,58,80,110,136,157,177**;16 DEC 97
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ; Reference to ^DIC(42 is supported by DBIA 10039.
 | 
|---|
| 5 |  ; Reference to ^PS(50.7 is supported by DBIA 2180.
 | 
|---|
| 6 |  ; Reference to ^PSDRUG( is supported by DBIA 2192.
 | 
|---|
| 7 |  ; Reference to ^DIC is supported by DBIA 10006.
 | 
|---|
| 8 |  ; Reference to ^DIC1 is supported by DBIA 10007.
 | 
|---|
| 9 |  ; Reference to ^DIR is supported by DBIA 10026.
 | 
|---|
| 10 |  ; Reference to ^VALM1 is supported by DBIA 10116.
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 | ENDL ; device look-up
 | 
|---|
| 13 |  N DA,DIC,DIE,DIX,DO,DR
 | 
|---|
| 14 |  S DIC="^%ZIS(1,",DIC(0)="EIMZ" D DO^DIC1,^DIC I Y'>0 K X Q
 | 
|---|
| 15 |  S X=Y(0,0)
 | 
|---|
| 16 |  Q
 | 
|---|
| 17 |  ;
 | 
|---|
| 18 | ENDH(X) ; device help
 | 
|---|
| 19 |  N D,XQH,DA,DIC,DIE,DO,DR,DZ
 | 
|---|
| 20 |  S DIC="^%ZIS(1,",DIC(0)="EIM" D DO^DIC1,^DIC
 | 
|---|
| 21 |  Q
 | 
|---|
| 22 |  ;
 | 
|---|
| 23 | READ ; hold screen
 | 
|---|
| 24 |  I $D(IOST) Q:$E(IOST)'="C"
 | 
|---|
| 25 |  W ! I $D(IOSL),$Y<(IOSL-4) G READ
 | 
|---|
| 26 |  W !?5,"Press return to continue  " R X:$S($D(DTIME):DTIME,1:300)
 | 
|---|
| 27 |  Q
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 | ENOISC(PSJOI,USAGE)          ;Set DIC("S") so that only Orderable Items with at 
 | 
|---|
| 30 |  ;least 1 active dispense drug for the specified usage.
 | 
|---|
| 31 |  ;Input:  PSJOI IEN of Orderable Item selected
 | 
|---|
| 32 |  ;        USAGE - Type of drugs (UD,IV,etc) to be selected
 | 
|---|
| 33 |  ;Output: 1-At least one dispense drug found
 | 
|---|
| 34 |  ;        0-None found
 | 
|---|
| 35 |  N FOUND,PSJ
 | 
|---|
| 36 |  S PSJ=$P($G(^PS(50.7,+PSJOI,0)),U,4),FOUND=$S('PSJ:1,PSJ>DT:1,1:0)
 | 
|---|
| 37 |  I FOUND S FOUND=0 F PSJ=0:0 S PSJ=$O(^PSDRUG("ASP",PSJOI,PSJ)) Q:FOUND!'PSJ  I $P($G(^PSDRUG(PSJ,2)),U,3)[USAGE,'$G(^("I"))!($G(^("I"))'<DT) S FOUND=1
 | 
|---|
| 38 |  Q FOUND
 | 
|---|
| 39 |  ;
 | 
|---|
| 40 | AADR ; display allergies and adverse reactions
 | 
|---|
| 41 |  D ATS^PSJMUTL(60,50,1) N A,B
 | 
|---|
| 42 |  I (PSGALG=0)&(PSGADR=0) W !!,"No allergies or ADRs on file."
 | 
|---|
| 43 |  I PSGALG'=0 W !!,"Allergies: " S B="PSGALG" F  S A=$Q(@B) Q:A=""  W ?12,$G(@A),! S B=A
 | 
|---|
| 44 |  I PSGADR'=0 W !,"      ADR: " S B="PSGADR" F  S A=$Q(@B) Q:A=""  W ?12,$G(@A),! S B=A
 | 
|---|
| 45 |  D READ K PSGALG,PSGADR Q
 | 
|---|
| 46 |  ;
 | 
|---|
| 47 | ENALU ; application look-up
 | 
|---|
| 48 |  N PSJ S PSJ=DA(1) N DA,DIC,DIE,DIX,DO,DR S DIC="^PS(50.35,",DIC(0)="EIMZ" D DO^DIC1,^DIC I Y'>0 K X Q
 | 
|---|
| 49 |  S X=$P(Y(0),"^",2) K:$S(X="":1,1:$D(^PS(50.3,PSJ,1,"B",X))) X
 | 
|---|
| 50 |  Q
 | 
|---|
| 51 |  ;
 | 
|---|
| 52 | ENAQ ; application query
 | 
|---|
| 53 |  S X=DZ N D,DA,DIC,DIE,DO,DR,DZ,XQH S DIC="^PS(50.35,",DIC(0)="EIMQ" D DO^DIC1,^DIC
 | 
|---|
| 54 |  Q
 | 
|---|
| 55 |  ;
 | 
|---|
| 56 | ENPC(PSJTYP,PSJSYSP,LEN,TEXT) ; Copy Provider Comments -> Special Instructions.
 | 
|---|
| 57 |  Q:'$D(^PS(53.1,+$G(PSJORD),12,1,0)) ""
 | 
|---|
| 58 |  N DIR,PSGSI,PSGOEE,X,Y
 | 
|---|
| 59 |  S Y="" F X=0:0 S X=$O(^PS(53.1,+$G(PSJORD),12,X)) Q:'X  S Y=Y_^(X,0)_" " Q:$L(Y)>LEN
 | 
|---|
| 60 |  S:$G(PSJTYP)'="V" Y=$$ENSET^PSGSICHK(Y) S:$G(PSJTYP)="V" Y=$E(Y,1,$L(Y)-1)
 | 
|---|
| 61 |  I $L(Y)'<LEN S PSGOEE=0 D REDISP Q PSGSI
 | 
|---|
| 62 |  ;Display Provider Comments Prior to Asking the Copy Provider Comments Question;BHW;PSJ*5*136
 | 
|---|
| 63 |  N PSJTMP S PSJTMP=0
 | 
|---|
| 64 |  W !,"PROVIDER COMMENTS:"
 | 
|---|
| 65 |  F  S PSJTMP=$O(^PS(53.1,+$G(PSJORD),12,PSJTMP)) Q:'PSJTMP  W !,^PS(53.1,+$G(PSJORD),12,PSJTMP,0)
 | 
|---|
| 66 |  S PSGSI=Y W ! S DIR(0)="S^Y:Yes;N:No;!:Copy and flag for display in a BCMA Message Box",DIR("A")="Copy the Provider Comments into "_$$ENFIELD(PSJTYP)_" (Yes/No/!)",DIR("??")="^D ENPCHLP1^PSJUTL(PSJTYP)" D ^DIR
 | 
|---|
| 67 |  Q:Y="Y" PSGSI
 | 
|---|
| 68 |  Q:Y="!" PSGSI_"^1"
 | 
|---|
| 69 |  Q ""
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 | REDISP ; Redisplay Provider Comments and allow entry of Spec. Instructions.
 | 
|---|
| 72 |  D CLEAR^VALM1 F X=0:0 S X=$O(^PS(53.1,+$G(PSJORD),12,X)) Q:'X  W ^(X,0),!
 | 
|---|
| 73 |  W !! S PSGSI=""
 | 
|---|
| 74 |  D:PSJTYP'="V" 8^PSGOE81
 | 
|---|
| 75 |  I PSJTYP="V" D 64^PSIVEDT1 S PSGSI=P("OPI")
 | 
|---|
| 76 |  Q
 | 
|---|
| 77 |  ;
 | 
|---|
| 78 | ENPCHLP1(Y) ; Display help messages for Provider Comment copy.
 | 
|---|
| 79 |  W !,"Enter ""YES"" to copy Provider Comments into the ",$$ENFIELD(Y)," field",!,"or ""NO"" to bypass",!,"or ""!"" to copy the Provider Comments into the ",$$ENFIELD(PSJTYP)," field",!,"and flag them for display in a BCMA Message Box",!!
 | 
|---|
| 80 |  Q
 | 
|---|
| 81 | ENPCHLP2(Y,X) ;
 | 
|---|
| 82 |  W !,"The Provider Comments entered for this order are longer than the space available",!,"in the ",$$ENFIELD(Y)," field.",!!,"Enter ""YES"" to copy the first ",X-3," characters into the ",$$ENFIELD(Y),!,"field, or ""NO"" to continue.",!!
 | 
|---|
| 83 |  Q
 | 
|---|
| 84 | ENBCMA(PSJTYP)  ;
 | 
|---|
| 85 |  N DIR,X,Y
 | 
|---|
| 86 |  W !!,"Would you like to flag the ",$$ENFIELD(PSJTYP)," field for display in a BCMA",!,"Message box?"
 | 
|---|
| 87 |  W ! S DIR(0)="S^Y:Yes;N:No",DIR("A")="Flag the "_$$ENFIELD(PSJTYP)_" (Yes/No)" D ^DIR
 | 
|---|
| 88 |  K PSJCOMSI I $G(PSJCOM),$G(PSJORD)'["P" N TEXT S TEXT=$S(PSJTYP="U":$G(PSGSI),1:$G(P("OPI"))) S PSJCOMSI=$$COMSI(PSJCOM,TEXT)
 | 
|---|
| 89 |  Q:Y="Y" $S($G(PSJTYP)="U":$P(PSGSI,"^")_"^1",1:$P(P("OPI"),"^")_"^1")
 | 
|---|
| 90 |  Q $S(PSJTYP="U":$P(PSGSI,"^"),1:$P($G(P("OPI")),"^"))
 | 
|---|
| 91 | ENFIELD(Y) ;
 | 
|---|
| 92 |  Q $S(Y="V":"Other Print Info",1:"Special Instructions")
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 | COMSI(PARENT,INSTR) ;
 | 
|---|
| 95 |  N DIR,X,Y
 | 
|---|
| 96 |  W !!!!?15,"** WARNING **",!?5,"This order is part of a complex order."
 | 
|---|
| 97 |  W !!,"Would you like to copy the ",$$ENFIELD(PSJTYP)
 | 
|---|
| 98 |  W !,"to the other orders in the complex order?"
 | 
|---|
| 99 |  S DIR(0)="S^Y:Yes;N:No",DIR("A")="     Copy the "_$$ENFIELD(PSJTYP)_" (Yes/No)" D ^DIR
 | 
|---|
| 100 |  Q:Y="Y" 1
 | 
|---|
| 101 |  Q 0
 | 
|---|
| 102 |  ;
 | 
|---|
| 103 | ENORL(X) ; Return patient's location as variable ptr.
 | 
|---|
| 104 |  Q $S(+$G(^DIC(42,+X,44)):+$G(^(44))_";SC(",$D(^DIC(42,+X,0)):+X_";DIC(42,",1:"")
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 | ENMARD() ; validate MAR SELECTION DEFAULT string in WARD PARMS file.
 | 
|---|
| 107 |  N PSJANS,PSJX1,PSJX2,RANGE,Q
 | 
|---|
| 108 |  S RANGE="1:6" F PSJX1=1:1:6 S RANGE(PSJX1)=""
 | 
|---|
| 109 |  S:$E(X)="-" X=+RANGE_X S:$E($L(X))="-" X=X_$P(RANGE,":",2)
 | 
|---|
| 110 |  S PSJANS="" F Q=1:1:$L(X,",") S PSJX1=$P(X,",",Q) D FS Q:'$D(PSJANS)
 | 
|---|
| 111 |  Q:'$G(PSJANS) 0
 | 
|---|
| 112 |  S PSJANS=$E(PSJANS,1,$L(PSJANS)-1) F Q=1:1:$L(PSJANS,",") D  Q:'$D(PSJANS)
 | 
|---|
| 113 |  .I $P(PSJANS,",",Q)=1,$L(PSJANS,",")>1 W !!,"All Medications (1) may not be selected in combination with other types." K PSJANS Q
 | 
|---|
| 114 |  .W ?47,$P(PSJANS,",",Q)," - ",$P($T(@$P(PSJANS,",",Q)),";;",2),!
 | 
|---|
| 115 |  S:$G(PSJANS) X=PSJANS Q $G(PSJANS)
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 | FS ;
 | 
|---|
| 118 |  I $S(PSJX1?1.N1"-"1.N:0,PSJX1'?1.N:1,'$D(RANGE(PSJX1)):1,1:","_PSJANS[PSJX1) K PSJANS Q
 | 
|---|
| 119 |  I PSJX1'["-" S PSJANS=PSJANS_PSJX1_"," Q
 | 
|---|
| 120 |  S PSJX2=+PSJX1,PSJANS=PSJANS_PSJX2_","
 | 
|---|
| 121 |  F  S PSJX2=$O(RANGE(PSJX2)) K:$S(X="":1,","_PSJANS[PSJX2:1,1:PSJX2>$P(PSJX1,"-",2)) PSJANS Q:'$D(PSJANS)  S PSJANS=PSJANS_PSJX2_"," Q:PSJX2=$P(PSJX1,"-",2)
 | 
|---|
| 122 |  Q
 | 
|---|
| 123 |  ;
 | 
|---|
| 124 | ENMARDH ;Help text for MAR default answer.
 | 
|---|
| 125 |  W !!?2,"Enter the number corresponding to the type of orders to be included on MARs",!,"printed for this ward. Multiple types (except 1) may be selected using ""-""",!,"or "","" as delimiters.",!!,"Choose from: ",!
 | 
|---|
| 126 |  N X F X=1:1:6 W !?13,X," - ",$P($T(@X),";;",2)
 | 
|---|
| 127 |  W !
 | 
|---|
| 128 |  Q
 | 
|---|
| 129 | 1 ;;All Medications
 | 
|---|
| 130 | 2 ;;Non-IV Medications only
 | 
|---|
| 131 | 3 ;;IV Piggybacks
 | 
|---|
| 132 | 4 ;;LVPs
 | 
|---|
| 133 | 5 ;;TPNs
 | 
|---|
| 134 | 6 ;;Chemotherapy Medications (IV)
 | 
|---|
| 135 |  ;
 | 
|---|
| 136 | EFD ;The following EFD Tags are used to Calculate the Expected First Dose for backdoor
 | 
|---|
| 137 |  ;orders.  The call to $$ENQ^PSJORP2 is used to actually perform the calculation.
 | 
|---|
| 138 |  ;The program $$ENQ^PSJORP2 requires the variable INFO to equal the following:
 | 
|---|
| 139 |  ;BHW;PSJ*5*136
 | 
|---|
| 140 |  ; INFO (piece 1) = START DATE/TIME      ;PSGNESD (NEW ORDER)
 | 
|---|
| 141 |  ; INFO (piece 2) = STOP DATE/TIME       ;PSGNEFD (NEW ORDER)
 | 
|---|
| 142 |  ; INFO (piece 3) = SCHEDULE             ;PSGSCH  (NEW ORDER)
 | 
|---|
| 143 |  ; INFO (piece 4) = SCHEDULE TYPE        ;PSGST   (NEW ORDER)
 | 
|---|
| 144 |  ; INFO (piece 5) = ORDERABLE ITEM       ;PSGDRG  (NEW ORDER)
 | 
|---|
| 145 |  ; INFO (piece 6) = ADMIN TIMES          ;PSGS0Y  (NEW ORDER)
 | 
|---|
| 146 |  ; 
 | 
|---|
| 147 | EFDNEW ;Call Here if NEW or RENEWED Order
 | 
|---|
| 148 |  N INFO
 | 
|---|
| 149 |  S INFO=($G(PSGNESD))_U_($G(PSGNEFD))_U_($G(PSGSCH))_U_($G(PSGST))_U_($G(PSGDRG))_U_($G(PSGS0Y))
 | 
|---|
| 150 |  D EFDDISP
 | 
|---|
| 151 |  QUIT
 | 
|---|
| 152 | EFDACT ;Call here if Editing Fields for an ACTIVE order
 | 
|---|
| 153 |  ; Field 10 = Start Date
 | 
|---|
| 154 |  ; Field 34 = Stop Date
 | 
|---|
| 155 |  ; Field 41 = Admin Times
 | 
|---|
| 156 |  N INFO,KEY,ORDER,LAST
 | 
|---|
| 157 |  ;Loop Fields to be edited, in order, and determine when to Display expected first dose message
 | 
|---|
| 158 |  F KEY=1:1 S ORDER=$P(PSGOEER,";",KEY) Q:'$L(ORDER)  I "10^34^41"[$P(ORDER,U,1) S ORDER(KEY)=$P(ORDER,U,1)
 | 
|---|
| 159 |  ;If there are no entries in ORDER, then were Not Editing Start/Stop or Admin Times
 | 
|---|
| 160 |  S LAST=$O(ORDER(99),-1) Q:'LAST
 | 
|---|
| 161 |  ;Only display EFD once, so Quit if this call is not for the Last field in the Edit
 | 
|---|
| 162 |  S LAST=ORDER(LAST)
 | 
|---|
| 163 |  I LAST'=PSGF2 Q
 | 
|---|
| 164 |  S INFO=($G(PSGSD))_U_($G(PSGFD))_U_($G(PSGSCH))_U_($G(PSGST))_U_($G(PSGPDRG))_U_($G(PSGS0Y))
 | 
|---|
| 165 |  D EFDDISP
 | 
|---|
| 166 |  QUIT
 | 
|---|
| 167 | EFDNV ;Call here if Editing Fields for a NON-VERIFIED order
 | 
|---|
| 168 |  ; Field 10 = Start Date
 | 
|---|
| 169 |  ; Field 25 = Stop Date
 | 
|---|
| 170 |  ; Field 39 = Admin Times
 | 
|---|
| 171 |  N INFO,KEY,ORDER,LAST
 | 
|---|
| 172 |  ;Check if called during finish process
 | 
|---|
| 173 |  I '$D(PSGOEER) D  D EFDDISP Q
 | 
|---|
| 174 |  . S INFO=($G(PSGNESD))_U_($G(PSGNEFD))_U_($G(PSGSCH))_U_($G(PSGST))_U_($G(PSGPDRG))_U_($G(PSGS0Y))
 | 
|---|
| 175 |  . Q
 | 
|---|
| 176 |  ;Loop Fields to be edited, in order, and determine when to Display expected first dose message
 | 
|---|
| 177 |  F KEY=1:1 S ORDER=$P(PSGOEER,";",KEY) Q:'$L(ORDER)  I "10^25^39"[$P(ORDER,U,1) S ORDER(KEY)=$P(ORDER,U,1)
 | 
|---|
| 178 |  ;If there are no entries in ORDER, then were Not Editing Start/Stop or Admin Times
 | 
|---|
| 179 |  S LAST=$O(ORDER(99),-1) Q:'LAST
 | 
|---|
| 180 |  ;Only display EFD once, so Quit if this call is not for the Last field in the Edit
 | 
|---|
| 181 |  S LAST=ORDER(LAST)
 | 
|---|
| 182 |  I LAST'=PSGF2 Q
 | 
|---|
| 183 |  S INFO=($G(PSGSD))_U_($G(PSGFD))_U_($G(PSGSCH))_U_($G(PSGST))_U_($G(PSGPDRG))_U_($G(PSGS0Y))
 | 
|---|
| 184 |  D EFDDISP
 | 
|---|
| 185 |  QUIT
 | 
|---|
| 186 | EFDIV(PSGZZND) ;Set variables for EFD on IV orders.
 | 
|---|
| 187 |  S PSGNESD=P(2),PSGNEFD=P(3),PSGSCH=P(9),PSGST=$P($G(PSGZZND),"^",5),PSGDRG=$P($G(P("PD")),"^"),PSGS0Y=P(11)
 | 
|---|
| 188 |  ;BHW - PSJ*5*177 Add call to check stop date.  If it's in the past, Display Message
 | 
|---|
| 189 |  D CHKSTOP
 | 
|---|
| 190 |  D EFDNEW
 | 
|---|
| 191 |  W !
 | 
|---|
| 192 |  Q
 | 
|---|
| 193 | EFDDISP ;Display Expected First Dose
 | 
|---|
| 194 |  N Y
 | 
|---|
| 195 |  Q:$G(PSGST)="OC"!($G(PSGST)="P")
 | 
|---|
| 196 |  Q:$G(PSGSCH)["ON CALL"!($G(PSGSCH)["ON-CALL")!($G(PSGSCH)["ONCALL")
 | 
|---|
| 197 |  Q:$G(PSGSCH)["PRN"
 | 
|---|
| 198 |  I '$L($G(PSGP)) N PSGP S PSGP=""
 | 
|---|
| 199 |  ;
 | 
|---|
| 200 |  S Y=$$ENQ^PSJORP2(PSGP,INFO)
 | 
|---|
| 201 |  I 'Y S Y="Unable to Calculate"
 | 
|---|
| 202 |  X ^DD("DD")
 | 
|---|
| 203 |  W !,"Expected First Dose: ",Y H 2
 | 
|---|
| 204 |  Q
 | 
|---|
| 205 | CHKSTOP ;BHW - PSJ*5*177 Warn user if the Stop Date is < now.
 | 
|---|
| 206 |  I '+$G(P(3)) Q
 | 
|---|
| 207 |  N PSNOW,%,%H,%I,X D NOW^%DTC S PSNOW=%
 | 
|---|
| 208 |  I +P(3)<PSNOW D  Q
 | 
|---|
| 209 |  . W !,$C(7),"The Stop Date/Time is in the Past!!!  This order will",!,"automatically EXPIRE upon Verification!!",!
 | 
|---|
| 210 |  . Q
 | 
|---|
| 211 |  Q
 | 
|---|