| 1 | PSJDOSE ;BIR/MV-POSSIBLE DOSES UTILITY ;16 Jan 2001  1:53 PM
 | 
|---|
| 2 |  ;;5.0; INPATIENT MEDICATIONS ;**50,65,106,111**;16 DEC 97
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ; Reference to ^PSSORPH is supported by DBIA #3234.
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ;PSJDSFLG: Set to 1 if Dose and DD are not compatible
 | 
|---|
| 7 |  ;PSJDSSEL: The selected dose in format:
 | 
|---|
| 8 |  ;          Dosage Order^DD IEN^DUPD/BCMA DUPD^1(if BCMA DUPD exist
 | 
|---|
| 9 |  ;PSJDSUPD: Set to 1 if need to prompt for the Units Per Dose
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 | EDITDOSE ;Editing Dosage Ordered for active order
 | 
|---|
| 12 |  ;*Need to set PSJDSFLG to null when call EDITDOSE.
 | 
|---|
| 13 |  NEW PSGOER1,PSJDD,PSJDSUPD,PSJDSSEL,PSJX,Y
 | 
|---|
| 14 |  ;Offer the possible doses from the only one or 1st DD
 | 
|---|
| 15 |  S PSJX=$O(^PS(53.45,PSJSYSP,2,0)) S PSJDD=+$G(^(+PSJX,0))
 | 
|---|
| 16 |  D DOSE(PSJDD)
 | 
|---|
| 17 |  D DOSECHK
 | 
|---|
| 18 |  I +PSJDSFLG D
 | 
|---|
| 19 |  . W !!,PSJDOSE("WARN"),!,PSJDOSE("WARN1"),!
 | 
|---|
| 20 |  . D PAUSE^VALM1
 | 
|---|
| 21 |  S PSGOEE=2
 | 
|---|
| 22 |  Q
 | 
|---|
| 23 | GETDOSE(PSJDD) ;Dosage Order
 | 
|---|
| 24 |  NEW PSJDSSEL,PSJDSUPD
 | 
|---|
| 25 |  D DOSE(PSJDD)
 | 
|---|
| 26 |  Q:'$D(PSJDSSEL)
 | 
|---|
| 27 |  D:+$G(PSJDSUPD) DUPD
 | 
|---|
| 28 |  D:'+$G(PSJDSUPD) SETDUPD($P(PSJDSSEL,U,3))
 | 
|---|
| 29 |  D DOSECHK
 | 
|---|
| 30 |  I +$G(PSJDSFLG) D
 | 
|---|
| 31 |  . W !!,PSJDOSE("WARN"),!,PSJDOSE("WARN1"),!
 | 
|---|
| 32 |  Q
 | 
|---|
| 33 |  ;
 | 
|---|
| 34 | SETVAR ;
 | 
|---|
| 35 |  S PSJDOSE("WARN")="WARNING: Dosage Ordered and Dispense Units do not match."
 | 
|---|
| 36 |  S PSJDOSE("WARN1")="         Please verify Dosage."
 | 
|---|
| 37 |  Q
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 | DOSE(PSJDD) ;Prompt for Dosage Ordered
 | 
|---|
| 40 |  ;PSJDD: Dispense drug IEN
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 |  NEW DA,DR,DIR,DTOUT,DUOUT,DIRUT,PSJDL,PSJX,PSJPIECE,PSJCONT
 | 
|---|
| 43 |  D SETVAR
 | 
|---|
| 44 |  D DOSE^PSSORPH(.PSJDOX,+PSJDD,"U")
 | 
|---|
| 45 |  I '$D(PSJDOX) S PSJDOX(1)=-1
 | 
|---|
| 46 |  S PSJPIECE=$S($P(PSJDOX(1),U,11)]"":11,1:3)
 | 
|---|
| 47 |  I PSJPIECE=3 S:$S($P(PSJDOX(1),U,3)="":1,1:$P(PSJDOX(1),U)=-1) $P(PSJDOX(1),U)=-1
 | 
|---|
| 48 | AGAIN ;Prompt for dosage order again
 | 
|---|
| 49 |  S PSJX=0
 | 
|---|
| 50 |  NEW DIR
 | 
|---|
| 51 |  W:($P(PSJDOX(1),U)'=-1) !!,"Available Dosage(s)"
 | 
|---|
| 52 |  F PSJDL=0:0 S PSJDL=$O(PSJDOX(PSJDL)) Q:$S('PSJDL:1,$G(DUOUT):1,1:+PSJDOX(PSJDL)=-1)  D
 | 
|---|
| 53 |  . S PSJX=PSJX+1
 | 
|---|
| 54 |  . W !?4,$J(PSJX,3),".    ",$P(PSJDOX(PSJDL),U,PSJPIECE)
 | 
|---|
| 55 |  . I '(PSJX#16) S DIR(0)="E" D ^DIR
 | 
|---|
| 56 |  W !
 | 
|---|
| 57 |  K DIR S DIR(0)="FO^1:60"
 | 
|---|
| 58 |  S DIR("A")=$S(+PSJX:"Select from list of Available Dosages or Enter Free Text Dose",1:"DOSAGE ORDERED")
 | 
|---|
| 59 |  S:$G(PSGDO)]"" DIR("B")=PSGDO
 | 
|---|
| 60 |  S DIR("?")="^D ENHLP^PSGOEM(53.1,109)" D ^DIR
 | 
|---|
| 61 |  S PSJY=Y
 | 
|---|
| 62 |  ;
 | 
|---|
| 63 |  ;* Dosage Ordered entered is null
 | 
|---|
| 64 |  I PSJY="" S PSJDSUPD=1,PSGDO="",PSJDSSEL=U_+PSJDD_U_1 Q
 | 
|---|
| 65 |  I $S($D(DTOUT):1,$D(DUOUT):1,$D(DIRUT):1,1:0) S PSGOROE1=1 Q
 | 
|---|
| 66 |  ;
 | 
|---|
| 67 |  ;* If select for the presented list (possible and local doses)
 | 
|---|
| 68 |  I $D(PSJDOX(PSJY)) D  G:'PSJCONT AGAIN Q
 | 
|---|
| 69 |  . NEW X S X=$P(PSJDOX(PSJY),U,PSJPIECE)
 | 
|---|
| 70 |  . W "  ",X
 | 
|---|
| 71 |  . S PSJCONT=$$CONT(X)
 | 
|---|
| 72 |  . Q:'PSJCONT
 | 
|---|
| 73 |  . D SELDOSE(PSJY,PSJDD)
 | 
|---|
| 74 |  ;
 | 
|---|
| 75 |  ;* Entered a numeric and choices are not local pos dose
 | 
|---|
| 76 |  I PSJY?.N!(PSJY?.N1".".N),(PSJPIECE'=3) D  G:'PSJCONT AGAIN  Q
 | 
|---|
| 77 |  . Q:$L(PSJY)>15
 | 
|---|
| 78 |  . D DOSE^PSSORPH(.PSJDOX,+PSJDD,"U",,PSJY/+$P(PSJDOX(1),U,5))
 | 
|---|
| 79 |  . S PSJCONT=$$CONT($P(PSJDOX(1),U,11))
 | 
|---|
| 80 |  . I 'PSJCONT D DOSE^PSSORPH(.PSJDOX,+PSJDD,"U") Q
 | 
|---|
| 81 |  . D SELDOSE(1,PSJDD)
 | 
|---|
| 82 |  ;
 | 
|---|
| 83 |  ;* Can't accept just a numeric value
 | 
|---|
| 84 |  I PSJY?.N!(PSJY?.N1".".N) D ENHLP^PSGOEM(53.1,109) G AGAIN
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 |  ;* Free text
 | 
|---|
| 87 |  G:'$$CONT(PSJY) AGAIN
 | 
|---|
| 88 |  K PSJDSSEL
 | 
|---|
| 89 |  F X=0:0 S X=$O(PSJDOX(X)) Q:'X  S PSJXDOSE=$P(PSJDOX(X),U,PSJPIECE) I PSJY=PSJXDOSE D SELDOSE(X,PSJDD) Q
 | 
|---|
| 90 |  I '$D(PSJDSSEL),($G(PSJY)]"") S PSJDSSEL=PSJY_U_+PSJDD_U_1,PSGDO=PSJY,PSJDSUPD=1
 | 
|---|
| 91 |  Q
 | 
|---|
| 92 |  ;
 | 
|---|
| 93 | SELDOSE(X,PSJDD) ;
 | 
|---|
| 94 |  S X=PSJDOX(X)
 | 
|---|
| 95 |  S PSGDO=$P(X,U,PSJPIECE)
 | 
|---|
| 96 |  S:$P(X,U)'=-1 PSJDOSE("DO")=$P(X,U,1,2)
 | 
|---|
| 97 |  S PSJDSSEL=$P(X,U,PSJPIECE)_U_PSJDD
 | 
|---|
| 98 |  I +$P(X,U,12) S $P(PSJDSSEL,U,3)=$P(X,U,12)_U_1 Q
 | 
|---|
| 99 |  S $P(PSJDSSEL,U,3)=$S(PSJPIECE=11:$P(X,U,3),1:1)
 | 
|---|
| 100 |  Q
 | 
|---|
| 101 | CONT(X) ;Ask if user accepting the dose
 | 
|---|
| 102 |  NEW DIR,DIRUT,Y
 | 
|---|
| 103 |  W ! K DIR,DIRUT,DUOUT
 | 
|---|
| 104 |  S DIR(0)="Y",DIR("A")="You entered "_X_" is this correct",DIR("B")="Yes"
 | 
|---|
| 105 |  D ^DIR
 | 
|---|
| 106 |  K DUOUT
 | 
|---|
| 107 |  Q +Y
 | 
|---|
| 108 |  ;
 | 
|---|
| 109 | DUPD ;
 | 
|---|
| 110 |  NEW PSJX,X
 | 
|---|
| 111 |  S PSGUD=1
 | 
|---|
| 112 |  W !,"UNITS PER DOSE: "_PSGUD_"// " R X:DTIME W "  ",X I X="^"!'$T S PSGOROE1=1 Q
 | 
|---|
| 113 |  S:X="" X=1
 | 
|---|
| 114 |  I X="@",'PSGUD W $C(7),"  ??" S X="?" D ENHLP^PSGOEM(53.11,.02) G DUPD
 | 
|---|
| 115 |  I X?1."?" D ENHLP^PSGOEM(53.11,.02) G DUPD
 | 
|---|
| 116 |  I X?1.2N1"/"1.2N S X=+$J(+X/$P(X,"/",2),0,2) W "  ("_$E("0",X<1)_X_")"
 | 
|---|
| 117 |  I $S($L(X)>12:1,X'=+X:1,X>50:1,X<0:1,1:X?.N1"."5.N) W $C(7),"  ??" S X="?" D ENHLP^PSGOEM(53.11,.02) G DUPD
 | 
|---|
| 118 |  S $P(PSJDSSEL,U,3)=X
 | 
|---|
| 119 |  D SETDUPD(X)
 | 
|---|
| 120 |  Q
 | 
|---|
| 121 | SETDUPD(X) ;
 | 
|---|
| 122 |  S PSGUD=X,X=$S(PSJDSSEL]"":$P(PSJDSSEL,U,2),1:0)
 | 
|---|
| 123 |  S PSJX=$O(^PS(53.45,PSJSYSP,2,"B",X,0))
 | 
|---|
| 124 |  S PSGUD=+$FN(PSGUD,"",4) S:$E(PSGUD)="." PSGUD="0"_PSGUD
 | 
|---|
| 125 |  S $P(^PS(53.45,PSJSYSP,2,+PSJX,0),U,2)=PSGUD
 | 
|---|
| 126 |  Q
 | 
|---|
| 127 | EDITDD ;Editing DDs
 | 
|---|
| 128 |  NEW DA,DR,DIE
 | 
|---|
| 129 |  S DIE="^PS(53.45,",DA=PSJSYSP,DR=2,DR(2,53.4502)=".02//1" D ^DIE
 | 
|---|
| 130 |  I '$O(^PS(53.45,PSJSYSP,2,0)) W $C(7),!!,"WARNING:      This order must have at least one dispense drug before pharmacy can",!?9,"verify it!"
 | 
|---|
| 131 |  Q
 | 
|---|
| 132 | DOSECHK ;
 | 
|---|
| 133 |  K PSJDSFLG S PSJDSFLG=0
 | 
|---|
| 134 |  Q:'$P(PSJSYSU,";",4)
 | 
|---|
| 135 |  Q:$G(PSGDO)=""
 | 
|---|
| 136 |  NEW PSJX,PSJXDD,PSJCNT S PSJCNT=0
 | 
|---|
| 137 |  F PSJX=0:0 S PSJX=$O(^PS(53.45,PSJSYSP,2,PSJX)) Q:'PSJX  D
 | 
|---|
| 138 |  . S PSJXDD=$G(^PS(53.45,PSJSYSP,2,PSJX,0)) Q:PSJXDD=""
 | 
|---|
| 139 |  . S:$P(PSJXDD,U,2)="" $P(^PS(53.45,PSJSYSP,2,PSJX,0),U,2)=1
 | 
|---|
| 140 |  . S PSJCNT=PSJCNT+1
 | 
|---|
| 141 |  D DOSECHK1
 | 
|---|
| 142 |  Q
 | 
|---|
| 143 | DOSECHK1 ;
 | 
|---|
| 144 |  NEW PSJX,PSJXDD,PSJXUNIT,PSJUNIT,PSJXFLG,PSJTOT
 | 
|---|
| 145 |  S PSJUNIT=$P(PSGDO,+PSGDO,2,$L(PSGDO,+PSGDO))
 | 
|---|
| 146 |  S (PSJDSFLG,PSJXFLG,PSJTOT)=0
 | 
|---|
| 147 |  S PSJX=0 F  S PSJX=$O(^PS(53.45,PSJSYSP,2,PSJX)) Q:'PSJX!PSJDSFLG!PSJXFLG  D
 | 
|---|
| 148 |  . S PSJXDD=$G(^PS(53.45,PSJSYSP,2,PSJX,0))
 | 
|---|
| 149 |  . S PSJXDUP=$S(+$P(PSJXDD,U,2):$P(PSJXDD,U,2),1:1)
 | 
|---|
| 150 |  . D DOSE^PSSORPH(.PSJXDOX,+PSJXDD,"U")
 | 
|---|
| 151 |  . I $S('$D(PSJXDOX):1,$P(PSJXDOX(1),U)="":1,1:+PSJXDOX(1)=-1) S PSJXFLG=1 Q
 | 
|---|
| 152 |  . S PSJXUNIT=""
 | 
|---|
| 153 |  . S:PSJUNIT["/" PSJXUNIT=PSJUNIT
 | 
|---|
| 154 |  . I PSJUNIT'["/" F X=1:1:$L(PSJUNIT)  I $E(PSJUNIT,X)'?.N&($E(PSJUNIT,X)'?1" ") S PSJXUNIT=PSJXUNIT_$E(PSJUNIT,X)
 | 
|---|
| 155 |  . I PSJCNT=1 D ONEDD Q:'PSJDSFLG
 | 
|---|
| 156 |  . D BCMAUPD(PSJXDD),DOSE^PSSORPH(.PSJXDOX,+PSJXDD,"U",,PSJXDUP)
 | 
|---|
| 157 |  . I PSJCNT=1 D ONEDD Q
 | 
|---|
| 158 |  . S PSJTOT=+PSJXDOX(1)+$G(PSJTOT)
 | 
|---|
| 159 |  I PSJCNT>1,(PSJTOT'=+PSGDO) S PSJDSFLG=1
 | 
|---|
| 160 |  Q
 | 
|---|
| 161 | ONEDD ;
 | 
|---|
| 162 |  NEW X S PSJDSFLG=1
 | 
|---|
| 163 |  F X=0:0 S X=$O(PSJXDOX(X)) Q:'X!'PSJDSFLG  D
 | 
|---|
| 164 |  . I +PSJXDOX(X)'=+PSGDO,(PSJXUNIT=$P(PSJXDOX(X),U,2)),$S(PSJXDUP=$P(PSJXDOX(X),U,3):1,1:PSJXDUP=$P(PSJXDOX(X),U,12)) D  Q:PSJDSFLG
 | 
|---|
| 165 |  .. N CHK S CHK=+PSGDO/$P(PSJXDOX(X),U,5) S CHK=+$FN(CHK,"",4) S:$E(CHK)="." CHK="0"_CHK I CHK=PSJXDUP S PSJDSFLG=0
 | 
|---|
| 166 |  . I +PSJXDOX(X)=+PSGDO,$TR($P(PSJXDOX(X),U,11)," ")=$TR(PSGDO," "),$S(PSJXDUP=$P(PSJXDOX(X),U,3):1,1:PSJXDUP=$P(PSJXDOX(X),U,12)) S PSJDSFLG=0
 | 
|---|
| 167 |  Q
 | 
|---|
| 168 | BCMAUPD(PSJDD) ;
 | 
|---|
| 169 |  NEW PSJCNT
 | 
|---|
| 170 |  K PSJBCMA
 | 
|---|
| 171 |  F X=0:0 S X=$O(PSJXDOX(X)) Q:'X  D
 | 
|---|
| 172 |  . Q:'+$P(PSJXDOX(X),U,12)
 | 
|---|
| 173 |  . S PSJCNT=+$G(PSJCNT)+1
 | 
|---|
| 174 |  . S PSJBCMA(+PSJDD,$P(PSJXDOX(X),U,12),PSJCNT)=$P(PSJXDOX(X),U,1,2)
 | 
|---|
| 175 |  Q
 | 
|---|
| 176 | DSPWARN ;
 | 
|---|
| 177 |  NEW PSJDOSE
 | 
|---|
| 178 |  D SETVAR
 | 
|---|
| 179 |  W !!,PSJDOSE("WARN"),!,PSJDOSE("WARN1"),!
 | 
|---|
| 180 |  D PAUSE^VALM1
 | 
|---|
| 181 |  Q
 | 
|---|