[613] | 1 | PSBVDLU1 ;BIRMINGHAM/EFC-VIRTUAL DUE LIST (VDL) UTILITIES ;Mar 2004
|
---|
| 2 | ;;3.0;BAR CODE MED ADMIN;**13,32**;Mar 2004;Build 32
|
---|
| 3 | ;
|
---|
| 4 | ; Reference/IA
|
---|
| 5 | ; EN^PSJBCMA1/2829
|
---|
| 6 | ;
|
---|
| 7 | ODDSCH(PSBTABX) ;
|
---|
| 8 | I (PSBOST'<PSBWBEG)&(PSBOST'>PSBWEND) D ADD(PSBREC,PSBOTXT,PSBOST,PSBDDS,PSBSOLS,PSBADDS,PSBTABX) ;Include start date/time as admin
|
---|
| 9 | S PSBQUIT=0,PSBCDT=PSBOST F S PSBCDT=$$FMADD^XLFDT(PSBCDT,"","",PSBFREQ) Q:PSBQUIT=1 D
|
---|
| 10 | .I $P(PSBCDT,".",2)="" S PSBCDT=PSBCDT-1_".24"
|
---|
| 11 | .I PSBCDT>PSBWEND S PSBQUIT=1 Q
|
---|
| 12 | .I PSBCDT'<PSBWBEG,PSBCDT<PSBOSP D ADD(PSBREC,PSBOTXT,PSBCDT,PSBDDS,PSBSOLS,PSBADDS,PSBTABX) Q
|
---|
| 13 | Q
|
---|
| 14 | GETFREQ(PSBDFN,PSBORDN) ;
|
---|
| 15 | K ^TMP("PSJ1",$J)
|
---|
| 16 | D EN^PSJBCMA1(PSBDFN,PSBORDN,1)
|
---|
| 17 | S PSBFREQ=$P(^TMP("PSJ1",$J,4),U,11)
|
---|
| 18 | S PSBSCHBR=$P(^TMP("PSJ1",$J,2),"^",5)
|
---|
| 19 | I $$PSBDCHK1^PSBVT1(PSBSCHBR) S PSBFREQ=""
|
---|
| 20 | K ^TMP("PSJ1",$J)
|
---|
| 21 | Q PSBFREQ
|
---|
| 22 | ;
|
---|
| 23 | GETADMIN(PSBDFN,PSBORDN,PSBSTRT,PSBFREQ,PSBEVDT) ;
|
---|
| 24 | ;Determine administration times of an odd schedule for today
|
---|
| 25 | N PSBADMIN
|
---|
| 26 | K ^TMP("PSB",$J,"GETADMIN")
|
---|
| 27 | D EN^PSJBCMA1(PSBDFN,PSBORDN,1)
|
---|
| 28 | S PSBADMIN=$P(^TMP("PSJ1",$J,4),U,9),PSBFREQ=$P(^TMP("PSJ1",$J,4),U,11),^TMP("PSB",$J,"GETADMIN",0)=PSBADMIN
|
---|
| 29 | I $E(PSBFREQ)'?1N K ^TMP("PSJ1",$J) Q $G(^TMP("PSB",$J,"GETADMIN",0))
|
---|
| 30 | I PSBFREQ=0 K ^TMP("PSJ1",$J) Q $G(^TMP("PSB",$J,"GETADMIN",0))
|
---|
| 31 | I PSBSTRT'<PSBEVDT S PSBADMIN=$E($P(PSBSTRT,".",2)_"0000",1,4),^TMP("PSB",$J,"GETADMIN",0)=PSBADMIN
|
---|
| 32 | S PSBCDT=PSBSTRT,(PSBADTMX,PSBQUIT)=0 F S PSBCDT=$$FMADD^XLFDT(PSBCDT,"","",PSBFREQ) D Q:PSBQUIT=1
|
---|
| 33 | .I $P(PSBCDT,".",2)="" S PSBCDT=PSBCDT-1_".24"
|
---|
| 34 | .I (PSBCDT\1)>(PSBEVDT\1) S PSBQUIT=1 Q
|
---|
| 35 | .I (PSBCDT\1)=(PSBEVDT\1) S PSBADMIN=PSBADMIN_$S(PSBADMIN="":"",1:"-")_$E($P(PSBCDT,".",2)_"0000",1,4)
|
---|
| 36 | .S ^TMP("PSB",$J,"GETADMIN",PSBADTMX)=PSBADMIN
|
---|
| 37 | .S:($L(PSBADMIN)+5)>255 PSBADTMX=PSBADTMX+1,PSBADMIN=""
|
---|
| 38 | K ^TMP("PSJ1",$J),PSBADTMX
|
---|
| 39 | Q $G(^TMP("PSB",$J,"GETADMIN",0))
|
---|
| 40 | ;
|
---|
| 41 | ADD(PSBREC,PSBSI,PSBDT,PSBDD,PSBSOL,PSBADD,PSBTAB) ;
|
---|
| 42 | ;
|
---|
| 43 | ; Description: Add order to ^TMP("PSB",$J,PSBTAB,...) for RPC Return RESULTS
|
---|
| 44 | ;
|
---|
| 45 | ; PSBREC=order hdr from above
|
---|
| 46 | ; PSBSI=special instructions
|
---|
| 47 | ; PSBDT=admin date/time
|
---|
| 48 | ; PSBDD=Dispense Drugs
|
---|
| 49 | ; PSBSOL=Solutions
|
---|
| 50 | ; PSBADD=Additives
|
---|
| 51 | ;
|
---|
| 52 | N PSB
|
---|
| 53 | S PSBDT=$E(PSBDT,1,12),PSBQR=0
|
---|
| 54 | S PSB=$O(^TMP("PSB",$J,PSBTAB,""),-1) ; Get next node
|
---|
| 55 | S $P(PSBREC,U,14)=PSBDT ; Admin Time sits in ^14
|
---|
| 56 | I $P(PSBREC,U,5)'="O" S X=$O(^PSB(53.79,"AORD",DFN,PSBONX,PSBDT,0)) D:X
|
---|
| 57 | .S $P(PSBREC,U,12)=X
|
---|
| 58 | .K PSBLCK L +^PSB(53.79,X):1 I L -^PSB(53.79,X) S PSBLCK=1
|
---|
| 59 | .S PSBSTUS=$P(^PSB(53.79,X,0),U,9),$P(PSBREC,U,13)=$S(PSBSTUS="N":"",(PSBSTUS="")&$G(PSBLCK):"U",1:PSBSTUS),$P(PSBREC,U,23)=$P(^PSB(53.79,X,0),U,10),$P(PSBREC,U,24)=$P(^PSB(53.79,X,0),U,7)
|
---|
| 60 | .I $D(^PSB(53.79,X)) I PSBDOSEF="PATCH",PSBSTUS="G",PSBDT=$P(^PSB(53.79,X,.1),U,3),PSBQRR=0 S PSBQR=1
|
---|
| 61 | .I PSBSTUS="G",$G(PSBFLAG) D CHECK ;Get the correct dispense drug
|
---|
| 62 | I ($P(PSBREC,U,5)="O") D
|
---|
| 63 | .S X=$O(^PSB(53.79,"AORDX",DFN,PSBONX,"")) Q:X=""
|
---|
| 64 | .S Y=$O(^PSB(53.79,"AORDX",DFN,PSBONX,X,"")) Q:Y="" S $P(PSBREC,U,12)=Y
|
---|
| 65 | .K PSBLCK L +^PSB(53.79,Y):1 I L -^PSB(53.79,Y) S PSBLCK=1
|
---|
| 66 | .S PSBSTUS=$P(^PSB(53.79,Y,0),U,9),$P(PSBREC,U,13)=$S(PSBSTUS="N":"",(PSBSTUS="")&$G(PSBLCK):"U",1:PSBSTUS),$P(PSBREC,U,24)=$P(^PSB(53.79,Y,0),U,7)
|
---|
| 67 | .I $D(^PSB(53.79,Y)) I PSBDOSEF="PATCH",PSBSTUS="G",PSBDT=$P(^PSB(53.79,Y,.1),U,3),PSBQRR=0 S PSBQR=1
|
---|
| 68 | .I PSBSTUS="G",$G(PSBFLAG) D CHECK
|
---|
| 69 | Q:PSBQR=1
|
---|
| 70 | S $P(PSBREC,U,25)=0 I $G(PSBTRFL),$P(PSBREC,U,11)]"",$P(PSBREC,U,11)'<$G(PSBNTDT),$P(PSBREC,U,11)'>$G(PSBTRDT) S $P(PSBREC,U,25)=1
|
---|
| 71 | S PSB=PSB+1,^TMP("PSB",$J,PSBTAB,PSB)=PSBREC ; Order Hdr
|
---|
| 72 | I $P(PSBREC,U,12)]"" S PSBONVDL($P(PSBREC,U,12))=""
|
---|
| 73 | S PSB=PSB+1,^TMP("PSB",$J,PSBTAB,PSB)=PSBSI ; Special Instructions
|
---|
| 74 | ; add dispense drugs
|
---|
| 75 | I $D(PSBDDA) S X="" F S X=$O(PSBDDA(X)) Q:X="" S PSB=PSB+1,^TMP("PSB",$J,PSBTAB,PSB)=PSBDDA(X)
|
---|
| 76 | S PSBCHDT=0
|
---|
| 77 | I (PSBTAB'["CVRSHT"),(PSBONX["V"),(PSBOSTS="D"),($G(PSBFOR)="") D Q ;get infusing bag from DCed but not DEed orders
|
---|
| 78 | .D PSJ^PSBVT(PSBX)
|
---|
| 79 | .D INFUSING^PSBVDLU2 I PSBCOMP=0 Q
|
---|
| 80 | .I $D(PSBSOLA) S X="" F S X=$O(PSBSOLA(X)) Q:X="" S PSB=PSB+1,^TMP("PSB",$J,PSBTAB,PSB)=PSBSOLA(X)
|
---|
| 81 | .I $D(PSBADA) S X="" F S X=$O(PSBADA(X)) Q:X="" S PSB=PSB+1,^TMP("PSB",$J,PSBTAB,PSB)=PSBADA(X)
|
---|
| 82 | .S X="" F S X=$O(PSBPORA(PSBONX,X)) S PSBUID=$P(PSBPORA(PSBONX,X),U,1) Q:PSBUID]"" Q:X=""
|
---|
| 83 | .I PSBUID["P" Q
|
---|
| 84 | .I PSBUID["WS" D
|
---|
| 85 | ..S PSBNODE=$O(^PSB(53.79,"AUID",DFN,X,PSBUID,""))
|
---|
| 86 | ..S PSBUIDA(PSBUID)="ID"_U_PSBUID
|
---|
| 87 | ..S X=0 F S X=$O(^PSB(53.79,PSBNODE,.6,X)) Q:'X S PSBUIDA(PSBUID)=PSBUIDA(PSBUID)_U_"ADD;"_$P(^PSB(53.79,PSBNODE,.6,X,0),U,1)
|
---|
| 88 | ..S X=0 F S X=$O(^PSB(53.79,PSBNODE,.7,X)) Q:'X S PSBUIDA(PSBUID)=PSBUIDA(PSBUID)_U_"SOL;"_$P(^PSB(53.79,PSBNODE,.7,X,0),U,1)
|
---|
| 89 | .S PSBSONX=PSBONX
|
---|
| 90 | .I '$D(PSBUIDA(PSBUID)) S PSBCKOR="" F S PSBCKOR=$O(PSBPORA(PSBSONX,PSBCKOR)) Q:PSBCKOR="" D CLEAN^PSBVT,PSJ1^PSBVT(DFN,PSBCKOR) Q:$D(PSBUIDA(PSBUID))
|
---|
| 91 | .S PSBONX=PSBSONX
|
---|
| 92 | .S:$D(PSBUIDA(PSBUID)) PSB=PSB+2,^TMP("PSB",$J,PSBTAB,PSB-1)=PSBUIDA(PSBUID),^TMP("PSB",$J,PSBTAB,PSB)="END"
|
---|
| 93 | .D CLEAN^PSBVT,PSJ1^PSBVT(DFN,$O(PSBPORA("")))
|
---|
| 94 | ; add additives
|
---|
| 95 | I $D(PSBADA) S X="" F S X=$O(PSBADA(X)) Q:X="" S PSB=PSB+1,^TMP("PSB",$J,PSBTAB,PSB)=PSBADA(X)
|
---|
| 96 | ; add solutions
|
---|
| 97 | I $D(PSBSOLA) S X="" F S X=$O(PSBSOLA(X)) Q:X="" S $P(PSBSOLA(X),U,5)="",PSB=PSB+1,^TMP("PSB",$J,PSBTAB,PSB)=PSBSOLA(X)
|
---|
| 98 | I PSBONX["V" D EN^PSBPOIV(DFN,PSBONX) ; get bags
|
---|
| 99 | I $D(^TMP("PSBAR",$J)) S PSBUID=DFN_"V"_99999 F S PSBUID=$O(^TMP("PSBAR",$J,PSBUID),-1) Q:PSBUID="" D
|
---|
| 100 | .S PSBUIDS=^TMP("PSBAR",$J,PSBUID)
|
---|
| 101 | .I $P(PSBUIDS,U,1)="I",$P(PSBUIDS,U,2)'="I",$P(PSBUIDS,U,2)'="S" Q ; bag has invalid IV parameter, is not infusing or stopped
|
---|
| 102 | .I $P(PSBUIDS,U,2)'="I",$P(PSBUIDS,U,2)'="S",$P(PSBUIDS,U,8)'="" Q ; label is no longer valid, bag is not infusing or stopped
|
---|
| 103 | .I $P(PSBUIDS,U,2)="C" Q ; bag is completed
|
---|
| 104 | .I $P(PSBUIDS,U,2)="G" Q ; bag is given (PBTAB)
|
---|
| 105 | .S PSB=PSB+1,^TMP("PSB",$J,PSBTAB,PSB)=$P(PSBUIDS,U,10,999)
|
---|
| 106 | K ^TMP("PSBAR",$J)
|
---|
| 107 | S PSB=PSB+1,^TMP("PSB",$J,PSBTAB,PSB)="END"
|
---|
| 108 | S ^TMP("PSB",$J,PSBTAB,0)=PSB
|
---|
| 109 | Q
|
---|
| 110 | ;
|
---|
| 111 | CHECK S FILE=53.795,PSBNODE=.5,PSBIENS=X_","
|
---|
| 112 | F I=0:0 S I=$O(^PSB(53.79,X,PSBNODE,I)) Q:'I S $P(PSBDDS,U,3,4)=$$GET1^DIQ(FILE,I_","_PSBIENS,.01,"I")_U_$$GET1^DIQ(FILE,I_","_PSBIENS,.01)
|
---|
| 113 | Q
|
---|
| 114 | ;
|
---|
| 115 | VNURSE(PSBTAB) ;add initials of verifying pharmacist/verifying nurse
|
---|
| 116 | F PSBLP=1:1:$P(^TMP("PSB",$J,PSBTAB,0),U,1) S X=^TMP("PSB",$J,PSBTAB,PSBLP) I $P(X,U)=DFN D
|
---|
| 117 | .K ^TMP("PSJ1",$J)
|
---|
| 118 | .D PSJ1^PSBVT(DFN,$P(X,U,2))
|
---|
| 119 | .S $P(^TMP("PSB",$J,PSBTAB,PSBLP),U,19)=$S(PSBVNI]"":PSBVNI,1:"***")
|
---|
| 120 | K PSBLP,PSBTAB
|
---|
| 121 | Q
|
---|
| 122 | ;
|
---|
| 123 | OKAY(PSBSTRT,PSBADMIN,PSBSCH,PSBORDER,PSBDRUG,PSBFREQ,PSBOSTS) ;
|
---|
| 124 | ;
|
---|
| 125 | ; Description: Determines if an order schedule is valid for
|
---|
| 126 | ; the date in PSBADMIN (i.e. Q4D, is it valid today)
|
---|
| 127 | ;
|
---|
| 128 | ; PSBSTRT: Start Date of order (Time ignored)
|
---|
| 129 | ; PSBADMIN: Date of administration to check (Time ignored)
|
---|
| 130 | ; PSBSCH: Schedule (i.e. MO-WE-FR@0900 or Q48H...)
|
---|
| 131 | ; PSBORDER: Order reference
|
---|
| 132 | ; PSBDRUG: Drug ordered (Orderable Item)
|
---|
| 133 | ; PSBOSTS: The status of the order
|
---|
| 134 | ;
|
---|
| 135 | N PSBOKAY,PSBDAYS,PSBDOW
|
---|
| 136 | S PSBOSTS=$G(PSBOSTS)
|
---|
| 137 | ;
|
---|
| 138 | S PSBOKAY=0 ; Default Flag
|
---|
| 139 | I PSBFREQ'="",PSBFREQ'="D",PSBFREQ'>1440 Q 1
|
---|
| 140 | ;PRN and ONE TIMES show everyday
|
---|
| 141 | I (PSBSCHT="P")!(PSBSCHT="O") Q 1
|
---|
| 142 | S PSBDAYS=$$DAYS(PSBSCH)
|
---|
| 143 | ;
|
---|
| 144 | I PSBDAYS=1 S PSBOKAY=1 Q PSBOKAY ; Order is everyday
|
---|
| 145 | ;
|
---|
| 146 | ; find out if today is a good day for multi days
|
---|
| 147 | S PSBOKAY=0,PSBRDTE=PSBSTRT
|
---|
| 148 | S PSBADBR=PSBADMIN\1
|
---|
| 149 | S PSBENR=(PSBADMIN\1)+1
|
---|
| 150 | I PSBDAYS>1 D Q PSBOKAY
|
---|
| 151 | .I PSBADBR=(PSBSTRT\1) S PSBOKAY=1
|
---|
| 152 | .F S PSBRDTE=$$FMADD^XLFDT(PSBRDTE,"","",PSBFREQ) Q:PSBRDTE>PSBENR D
|
---|
| 153 | ..I $P(PSBRDTE,".",2)="" S PSBRDTE=PSBRDTE-1_".24"
|
---|
| 154 | ..I PSBRDTE\1=PSBADBR S PSBOKAY=1
|
---|
| 155 | ..I PSBOKAY="1" Q
|
---|
| 156 | ;
|
---|
| 157 | ; Try the MO-WE-FR@0800 thing as last resort
|
---|
| 158 | S X=PSBADMIN D H^%DTC I %Y=-1 D Q PSBOKAY ; Error
|
---|
| 159 | .S PSBOKAY=0
|
---|
| 160 | .Q:PSBOSTS="E"
|
---|
| 161 | .Q:$G(PSBMHND)="PSBOMH"
|
---|
| 162 | .D ERROR^PSBMLU($G(PSBORDER,"UNKNOWN"),$G(PSBDRUG,""),DFN,"Unable to determine schedule "_PSBSCH,PSBSCH)
|
---|
| 163 | S PSBDOW=$P("SU^MO^TU^WE^TH^FR^SA",U,%Y+1)
|
---|
| 164 | I $F(PSBSCH,PSBDOW)>0 S PSBOKAY=1 Q PSBOKAY
|
---|
| 165 | S PSBOKAY=0
|
---|
| 166 | Q PSBOKAY
|
---|
| 167 | ;
|
---|
| 168 | DAYS(PSB) ; Return days between doses (-1: error, 1:everyday 2: QOD...)
|
---|
| 169 | ;
|
---|
| 170 | ; Is it a PRN
|
---|
| 171 | I PSB?.E1"PRN".E Q 1 ; Straight PRN - As Needed
|
---|
| 172 | ;
|
---|
| 173 | S PSB=$TR(PSB," ","")
|
---|
| 174 | I PSB?2.4N.E Q 1
|
---|
| 175 | S X=PSBFREQ/1440 Q X
|
---|
| 176 | ;
|
---|
| 177 | Q
|
---|
| 178 | ;
|
---|
| 179 | LAST ;
|
---|
| 180 | S PSBCC=0
|
---|
| 181 | S ZZ="" F S ZZ=$O(^PSB(53.79,X,.3,ZZ),-1) Q:'ZZ Q:PSBFLAG=1 S PSBDATA2=$G(^(ZZ,0)) D
|
---|
| 182 | .S PSBCC=PSBCC+1
|
---|
| 183 | .I (PSBCC=2)!($P($P(PSBDATA2,U)," ")="Refused:")!($P($P(PSBDATA2,U)," ")="Held:") S $P(PSBREC,U,11)=$P(PSBDATA2,U,3),PSBFLAG=1
|
---|
| 184 | Q
|
---|
| 185 | ;
|
---|