| 1 | PSBODL ;BIRMINGHAM/EFC-DUE LIST ;Mar 2004 | 
|---|
| 2 | ;;3.0;BAR CODE MED ADMIN;**5,9,38,32**;Mar 2004;Build 32 | 
|---|
| 3 | ;Per VHA Directive 2004-038 (or future revisions regarding same), this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | ; Reference/IA | 
|---|
| 6 | ; EN^PSJBCMA/2828 | 
|---|
| 7 | ; $$GET^XPAR/2263 | 
|---|
| 8 | ; ^XLFDT/10103 | 
|---|
| 9 | ; | 
|---|
| 10 | EN ; Prt DL | 
|---|
| 11 | N PSBGBL,PSBHDR,IOINHI,IOINORM,PSBGIVEN,PSBIEN,PSBLGDT,PSBEVDT,DFN,PSBFLAG | 
|---|
| 12 | S X="IOINHI;IOINORM" D ENDR^%ZISS S X="" | 
|---|
| 13 | I '$D(^TMP("PSBO",$J,"B")) S ^TMP("PSBO",$J,"B","EMPTY")="" | 
|---|
| 14 | S PSBGBL="^TMP(""PSBO"",$J,""B"")" | 
|---|
| 15 | I $G(PSBRPT(.4)) S $P(PSBRPT(.2),U,8)=1 | 
|---|
| 16 | F  S PSBGBL=$Q(@PSBGBL) Q:PSBGBL=""  Q:$QS(PSBGBL,1)'="PSBO"!($QS(PSBGBL,2)'=$J)  D | 
|---|
| 17 | .S DFN=$QS(PSBGBL,5) | 
|---|
| 18 | .K PSBHDR | 
|---|
| 19 | .S PSBHDR(1)="MEDICATION DUE LIST for " | 
|---|
| 20 | .S (Y,PSBEVDT)=$P(PSBRPT(.1),U,6) D D^DIQ S Z=Y,PSBHDR(1)=PSBHDR(1)_Y_"@" S Y=$P(PSBRPT(.1),U,7) S PSBHDR(1)=PSBHDR(1)_$E(Y_"0000",2,5) | 
|---|
| 21 | .S PSBEVDT2=$P(PSBRPT(.1),U,6) S Y=$P(PSBRPT(.1),U,9) S:Y]"" PSBHDR(1)=PSBHDR(1)_" to "_Z_"@"_$E(Y_"0000",2,5) | 
|---|
| 22 | .S PSBHDR(2)="Schedule Type(s): --" | 
|---|
| 23 | .F Y=1:1:4 I $P(PSBRPT(.2),U,Y) S $P(PSBHDR(2),": ",2)=$P(PSBHDR(2),": ",2)_$S(PSBHDR(2)["--":"",1:"/ ")_$P("Continuous^PRN^On-Call^One-Time",U,Y)_" " S PSBHDR(2)=$TR(PSBHDR(2),"-","") | 
|---|
| 24 | .S PSBHDR(3)="Order Type(s): --" | 
|---|
| 25 | .F Y=6,7,8 I $P(PSBRPT(.2),U,Y) S $P(PSBHDR(3),": ",2)=$P(PSBHDR(3),": ",2)_$S(PSBHDR(3)["--":"",1:"/ ")_$P("^^^^^IV^Unit Dose^Future Orders",U,Y)_" " S PSBHDR(3)=$TR(PSBHDR(3),"-","") | 
|---|
| 26 | .I $QS(PSBGBL,4)="EMPTY" D  Q | 
|---|
| 27 | ..S X="" F  S X=$O(PSBHDR(X)) Q:X=""  D  W !!?10,"** NO DATA FOR ENTIRE NURSE/WARD LOCATION **",! Q | 
|---|
| 28 | ...W !,PSBHDR(X) | 
|---|
| 29 | .D PRINT(DFN) | 
|---|
| 30 | K ^TMP("PSJ",$J),^TMP("PSB",$J),^TMP("PSBO",$J) | 
|---|
| 31 | Q | 
|---|
| 32 | PRINT(DFN) ;^TMP($J. | 
|---|
| 33 | N PSBGBL,PSBOSTRT,PSBOSTOP,PSBINDX,PSBTYPE,PSBSCH,PSBSCHT | 
|---|
| 34 | N PSBMED,PSBORD,PSB,PSBX,PSBY,PSBZ,PSBSTOP,PSBSTRT,PSBSM,PSBNUM,PSBAT | 
|---|
| 35 | N PSBADMIN,PSBADM,PSBSTAT,PSBWFLAG | 
|---|
| 36 | W $$HDR() | 
|---|
| 37 | S PSBOSTRT=$P(PSBRPT(.1),U,6)+$P(PSBRPT(.1),U,7) | 
|---|
| 38 | S PSBOSTOP=$P(PSBRPT(.1),U,6)+$P(PSBRPT(.1),U,9) | 
|---|
| 39 | K ^TMP("PSJ",$J),^TMP("PSB",$J) | 
|---|
| 40 | D EN^PSJBCMA(DFN,PSBOSTRT,"") | 
|---|
| 41 | I $G(^TMP("PSJ",$J,1,0))=-1 W !!?10,"** NO SPECIFIED MEDICATIONS TO PRINT **",!,$$BLANKS(),$$FTR^PSBODL1() Q | 
|---|
| 42 | S PSBI1=0 F  S PSBODATE=$$FMADD^XLFDT(PSBEVDT,PSBI1) Q:PSBODATE>PSBEVDT2  D | 
|---|
| 43 | .S PSBI1=1 | 
|---|
| 44 | .S Y=PSBODATE D D^DIQ | 
|---|
| 45 | .W !!,"Administration Date: "_Y,! | 
|---|
| 46 | .S PSBINDX=0 | 
|---|
| 47 | .F  S PSBINDX=$O(^TMP("PSJ",$J,PSBINDX)) Q:'PSBINDX  D | 
|---|
| 48 | ..S PSBTYPE=$P(^TMP("PSJ",$J,PSBINDX,0),U,3),PSBTYPE=$E(PSBTYPE,$L(PSBTYPE)) | 
|---|
| 49 | ..Q:PSBTYPE=""!(PSBTYPE="P")  ; No Pend this ver | 
|---|
| 50 | ..S PSBSTAT=^TMP("PSJ",$J,PSBINDX,1) | 
|---|
| 51 | ..I $P(PSBSTAT,U,7)["D"!($P(PSBSTAT,U,8)) Q | 
|---|
| 52 | ..Q:PSBTYPE="U"&('$P(PSBRPT(.2),U,7)) | 
|---|
| 53 | ..Q:PSBTYPE="V"&('$P(PSBRPT(.2),U,6)) | 
|---|
| 54 | ..S PSBTYPE=$S(PSBTYPE="U":"UD-",PSBTYPE="V":"IV-",1:"**") | 
|---|
| 55 | ..S Y=$P(PSBSTAT,U,2) | 
|---|
| 56 | ..Q:Y="C"&('$P(PSBRPT(.2),U,1)) | 
|---|
| 57 | ..Q:Y="P"&('$P(PSBRPT(.2),U,2)) | 
|---|
| 58 | ..Q:Y="OC"&('$P(PSBRPT(.2),U,3)) | 
|---|
| 59 | ..Q:Y="O"&('$P(PSBRPT(.2),U,4)) | 
|---|
| 60 | ..S PSBSCHT=Y | 
|---|
| 61 | ..S:PSBSCHT="" PSBSCHT="*" | 
|---|
| 62 | ..S PSBMED=$P(^TMP("PSJ",$J,PSBINDX,3),U,2) | 
|---|
| 63 | ..S PSBORD=$P(^TMP("PSJ",$J,PSBINDX,0),U,3) | 
|---|
| 64 | ..S ^TMP("PSB",$J,"B",PSBTYPE,PSBSCHT,PSBMED,PSBORD)="" | 
|---|
| 65 | .I '$D(^TMP("PSB",$J,"B")) W !!?10,"** NO SPECIFIED MEDICATIONS TO PRINT **",!,$$BLANKS(),$$FTR^PSBODL1() Q | 
|---|
| 66 | .S PSBGBL=$NAME(^TMP("PSB",$J,"B")),PSBWFLAG=0 | 
|---|
| 67 | .F  S PSBGBL=$Q(@PSBGBL) Q:PSBGBL=""  Q:($QS(PSBGBL,1)'="PSB")!($QS(PSBGBL,2)'=$J)!($QS(PSBGBL,3)'="B")  D | 
|---|
| 68 | ..K PSBORD,PSBFUTRO | 
|---|
| 69 | ..S PSBTYPE=$QS(PSBGBL,4) | 
|---|
| 70 | ..S PSBSCHT=$QS(PSBGBL,5) | 
|---|
| 71 | ..S PSBMED=$QS(PSBGBL,6) | 
|---|
| 72 | ..S PSBORD=$QS(PSBGBL,7) | 
|---|
| 73 | ..D CLEAN^PSBVT | 
|---|
| 74 | ..D PSJ1^PSBVT(DFN,PSBORD) | 
|---|
| 75 | ..D NOW^%DTC S PSBNOW=% | 
|---|
| 76 | ..Q:PSBOSP<PSBOSTRT | 
|---|
| 77 | ..Q:(PSBOSP<PSBOSTRT)&(PSBSCHT'="O") | 
|---|
| 78 | ..S (PSBYES,PSBODD,PSBDAYB,PSBSCBR)=0 | 
|---|
| 79 | ..S:$$PSBDCHK1^PSBVT1(PSBSCH) PSBYES=1,PSBDAYB=1 | 
|---|
| 80 | ..F I=1:1 Q:$P(PSBSCH,"-",I)=""  I $P(PSBSCH,"-",I)?2N!($P(PSBSCH,"-",I)?4N) S PSBYES=1,PSBSCBR=1 | 
|---|
| 81 | ..I PSBYES,PSBADST="",PSBSCHT'="O",PSBSCHT'="OC",PSBSCHT'="P" D  Q | 
|---|
| 82 | ...D ERROR^PSBMLU(PSBONX,PSBOITX,DFN,"Admin times required",PSBSCH) | 
|---|
| 83 | ..I PSBSCHT="OC" S PSBYES=1 | 
|---|
| 84 | ..I PSBSCHT="P" S PSBYES=1 | 
|---|
| 85 | ..I "PCS"'[PSBIVT S PSBYES=1 | 
|---|
| 86 | ..I PSBIVT["S",PSBISYR'=1 S PSBYES=1 | 
|---|
| 87 | ..I PSBIVT["C",PSBCHEMT'="P",PSBISYR'=1 S PSBYES=1 | 
|---|
| 88 | ..I PSBIVT["C",PSBCHEMT="A" S PSBYES=1 | 
|---|
| 89 | ..I PSBFREQ="O" S PSBFREQ=1440 | 
|---|
| 90 | ..I PSBFREQ="D" S PSBFREQ="" | 
|---|
| 91 | ..I PSBSCHT="P" S PSBFREQ=1440 | 
|---|
| 92 | ..I PSBSCHT="O" S PSBFREQ=1440 | 
|---|
| 93 | ..I 'PSBYES,PSBFREQ<1 D ERROR^PSBMLU(PSBONX,PSBOITX,DFN,"Invalid frequency received from order",PSBSCH) Q | 
|---|
| 94 | ..S PSBVALB=$$IVPTAB^PSBVDLU3(PSBOTYP,PSBIVT,PSBISYR,PSBCHEMT,PSBIVPSH) | 
|---|
| 95 | ..I 'PSBDAYB,'PSBSCBR,PSBSCHT="C",PSBVALB="1",PSBADST'="",PSBFREQ<1 D ERROR^PSBMLU(PSBONX,PSBOITX,DFN,"Invalid frequency received from order",PSBSCH) Q | 
|---|
| 96 | ..I +PSBFREQ>0 I (PSBFREQ#1440'=0),(1440#PSBFREQ'=0) S PSBODD=1 | 
|---|
| 97 | ..I PSBODD,PSBADST'="" D ERROR^PSBMLU(PSBONX,PSBOITX,DFN,"Administration Times on ODD SCHEDULE",PSBSCH) Q | 
|---|
| 98 | ..I PSBADST'="" D | 
|---|
| 99 | ...F PSBY=1:1:$L(PSBADST,"-")  D | 
|---|
| 100 | ....D:($P(PSBADST,"-",PSBY)'?2N)&($P(PSBADST,"-",PSBY)'?4N) | 
|---|
| 101 | .....D ERROR^PSBMLU(PSBONX,PSBOITX,DFN,"Invalid Admin times",PSBSCH) | 
|---|
| 102 | ..I PSBSCHT="C",PSBOTYP="U" Q:'$$OKAY^PSBVDLU1(PSBOST,PSBODATE,PSBSCH,PSBONX,PSBOITX,PSBFREQ,) | 
|---|
| 103 | ..I PSBSCHT="C",$$IVPTAB^PSBVDLU3(PSBOTYP,PSBIVT,PSBISYR,PSBCHEMT,PSBIVPSH),'$$OKAY^PSBVDLU1(PSBOST,PSBODATE,PSBSCH,PSBONX,PSBOITX,PSBFREQ) Q | 
|---|
| 104 | ..I PSBSCHT="O" D  Q:PSBGVN | 
|---|
| 105 | ...S (PSBGVN,X,Y)="" | 
|---|
| 106 | ...F  S X=$O(^PSB(53.79,"AOIP",DFN,PSBOIT,X),-1) Q:'X  D | 
|---|
| 107 | ....F  S Y=$O(^PSB(53.79,"AOIP",DFN,PSBOIT,X,Y),-1) Q:'Y  D | 
|---|
| 108 | .....I $P(^PSB(53.79,Y,.1),U)=PSBONX,$P(^PSB(53.79,Y,0),U,9)="G" S PSBGVN=1,(X,Y)=0 | 
|---|
| 109 | ..S PSBRMN=1 | 
|---|
| 110 | ..I PSBSCHT="O",PSBOST'=PSBOSP,PSBOSP<PSBOSTRT S PSBRMN=0 | 
|---|
| 111 | ..Q:'PSBRMN | 
|---|
| 112 | ..I PSBOST>$$FMADD^XLFDT(PSBNOW,"","",+($$GET^XPAR("DIV","PSB ADMIN BEFORE"))) S ^TMP("PSBO",$J,DFN,PSBORD,PSBTYPE)="" Q | 
|---|
| 113 | ..I PSBSCHT="OC" D  Q:PSBGVN&('$$GET^XPAR("DIV","PSB ADMIN MULTIPLE ONCALL")) | 
|---|
| 114 | ...S (PSBGVN,X,Y)="" | 
|---|
| 115 | ...F  S X=$O(^PSB(53.79,"AOIP",DFN,PSBOIT,X),-1) Q:'X  D | 
|---|
| 116 | ....F  S Y=$O(^PSB(53.79,"AOIP",DFN,PSBOIT,X,Y),-1) Q:'Y  D | 
|---|
| 117 | .....I $P(^PSB(53.79,Y,.1),U)=PSBONX,$P(^PSB(53.79,Y,0),U,9)="G" S PSBGVN=1,(X,Y)=0 | 
|---|
| 118 | ..S PSBLGDT="",X="" | 
|---|
| 119 | ..F  S X=$O(^PSB(53.79,"AOIP",DFN,+PSBOIT,X),-1) Q:'X  D  Q:PSBLGDT | 
|---|
| 120 | ...S PSBIEN="" | 
|---|
| 121 | ...F  S PSBIEN=$O(^PSB(53.79,"AOIP",DFN,+PSBOIT,X,PSBIEN),-1) Q:PSBIEN=""  D  Q:PSBLGDT | 
|---|
| 122 | ....S:$P($G(^PSB(53.79,PSBIEN,0)),U,9)="G" PSBLGDT=X | 
|---|
| 123 | ..S PSBADMIN="" K ^TMP("PSB",$J,"GETADMIN") | 
|---|
| 124 | ..I PSBSCHT="C" D  Q:PSBADMIN="" | 
|---|
| 125 | ...S PSBX=PSBADST,PSBFLAG=1 | 
|---|
| 126 | ...D:PSBX="" | 
|---|
| 127 | ....I PSBIVT="C",PSBCHEMT="A" S PSBX="0000",PSBFLAG=0 | 
|---|
| 128 | ....I PSBIVT="C",PSBISYR=0 S PSBX="0000",PSBFLAG=0 | 
|---|
| 129 | ....I PSBIVT="S",PSBISYR'=1 S PSBX="0000",PSBFLAG=0 | 
|---|
| 130 | ....I "HA"[PSBIVT S:PSBIVT]"" PSBX="0000",PSBFLAG=0 | 
|---|
| 131 | ...I ((PSBIVT="S")!(PSBIVT="C")),(PSBISYR=1) S:+($G(PSBX))=0 PSBX="" | 
|---|
| 132 | ...I (PSBIVT="C"),(PSBCHEMT="P") S:+($G(PSBX))=0 PSBX="" | 
|---|
| 133 | ...I PSBOTYP="U",PSBX="0000" S PSBX="" | 
|---|
| 134 | ...I PSBIVT="P" S:+($G(PSBX))=0 PSBX="" | 
|---|
| 135 | ...I PSBX="" S:($G(PSBFREQ)>29)!(PSBFREQ="D") PSBX=$$GETADMIN^PSBVDLU1(DFN,PSBONX,PSBOST,PSBFREQ,PSBODATE) | 
|---|
| 136 | ...E  S ^TMP("PSB",$J,"GETADMIN",0)=PSBX | 
|---|
| 137 | ...D:PSBX'="" | 
|---|
| 138 | ....F PSBXX=0:1 Q:'$D(^TMP("PSB",$J,"GETADMIN",PSBXX))  S PSBX=$G(^TMP("PSB",$J,"GETADMIN",PSBXX)) D | 
|---|
| 139 | .....F PSBY=1:1:$L(PSBX,"-")  D | 
|---|
| 140 | ......S PSBAT=+(PSBODATE_"."_$P(PSBX,"-",PSBY)) | 
|---|
| 141 | ......I PSBFLAG Q:PSBAT<PSBOSTRT!(PSBAT>PSBOSTOP) | 
|---|
| 142 | ......D VAL^PSBMLVAL(.PSBZ,DFN,PSBON,PSBOTYP,PSBAT) | 
|---|
| 143 | ......I (PSBZ(0)<0)&(PSBCNT=1) S ^TMP("PSBO",$J,DFN,PSBORD,PSBTYPE,PSBAT)="" Q | 
|---|
| 144 | ......I (PSBAT'["."),($G(PSBORD)["V") I (PSBOST<PSBOSTOP),(PSBOST'<PSBOSTRT) S ^TMP("PSBO",$J,DFN,PSBORD,PSBTYPE,PSBAT)="" Q | 
|---|
| 145 | ......Q:+PSBZ(0)<0 | 
|---|
| 146 | ......I $G(PSBOST)'>$G(PSBAT) S PSBADMIN=PSBADMIN_$S(PSBADMIN]"":"-",1:"")_$P(PSBX,"-",PSBY) | 
|---|
| 147 | ......E  I ($P($G(PSBOST),".")'>$P($G(PSBAT),"."))&($P($G(PSBAT),".",2)="") S PSBADMIN=PSBADMIN_$S(PSBADMIN]"":"-",1:"")_$P(PSBX,"-",PSBY) | 
|---|
| 148 | ...I +$G(PSBFREQ)>0,$G(PSBFREQ)<30,PSBADMIN'="0000" S PSBADMIN="Due every "_$G(PSBFREQ)_" minutes." | 
|---|
| 149 | ..I $Y>(IOSL-(12+($L(PSBADMIN)/27))) W !?(IOM-36\2),"(Medications Continued on Next Page)",$$FTR^PSBODL1(),$$HDR() | 
|---|
| 150 | ..I PSBSM S PSBSM=$S(PSBSMX:"H",1:"")_"SM" | 
|---|
| 151 | ..E  S PSBSM="" | 
|---|
| 152 | ..W !,$J(PSBSM,3),?6,PSBTYPE,$E(PSBSCHT,1,4),?12 S PSBWFLAG=1 | 
|---|
| 153 | ..S X="",Y=0 | 
|---|
| 154 | ..D WRAPPUP^PSBODL1 | 
|---|
| 155 | .I '$G(PSBWFLAG) W !!,?10,"** NO SPECIFIED MEDICATIONS TO PRINT **" | 
|---|
| 156 | .W $$BLANKS(),$$FTR^PSBODL1() | 
|---|
| 157 | .S PSBORD=$O(^TMP("PSBO",$J,DFN,""),-1) | 
|---|
| 158 | .I +$G(PSBORD)>0,$P(PSBRPT(.4),U,1),$D(^TMP("PSBO",$J,DFN,PSBORD)) D EN^PSBODL1 | 
|---|
| 159 | Q | 
|---|
| 160 | HDR() ; | 
|---|
| 161 | D PT^PSBOHDR(DFN,.PSBHDR) | 
|---|
| 162 | W !,"Self",?85,"Last",?100,"Start",?110,"Stop",?120,"Verifying" | 
|---|
| 163 | W !,"Med",?6,"Sched",?14,"Medication",?50,"Dose",?78,"Route",?85,"Given",?100,"Date",?110,"Date",?120,"Rph/Rn" | 
|---|
| 164 | W !,?100,"@Time",?110,"@Time" | 
|---|
| 165 | W !,$TR($J("",IOM)," ","-") | 
|---|
| 166 | Q "" | 
|---|
| 167 | BLANKS() ; | 
|---|
| 168 | Q:'$P(PSBRPT(.2),U,5) "" | 
|---|
| 169 | W ! | 
|---|
| 170 | D:$Y>(IOSL-26) | 
|---|
| 171 | .W ?(IOM-42\2),"(Changes/Addendums to Orders on Next Page)" | 
|---|
| 172 | .W $$FTR^PSBODL1(),$$HDR() ; New page - no room for blanks | 
|---|
| 173 | I IOSL<100 F  Q:$Y>(IOSL-26)  W ! | 
|---|
| 174 | W ?(IOM-28\2),"Changes/Addendums to orders" | 
|---|
| 175 | F X=1:1:4 D | 
|---|
| 176 | .W !,$TR($J("",IOM)," ","-") | 
|---|
| 177 | .W !!?3,"CON ___ PRN ___" | 
|---|
| 178 | .W ?20,"Drug: ",$TR($J("",22)," ","_") | 
|---|
| 179 | .W ?50,"Give: ",$TR($J("",42)," ","_") | 
|---|
| 180 | .W ?100,"Start: _________ Stop: _________" | 
|---|
| 181 | .W !?20,"Spec" | 
|---|
| 182 | .W !?3,"OT  ___ OC  ___" | 
|---|
| 183 | .W ?20,"Inst: ",$TR($J("",72)," ","_") | 
|---|
| 184 | .W ?100,"Initials: ______ Date: _________" | 
|---|
| 185 | W !,$TR($J("",IOM)," ","-") | 
|---|
| 186 | Q "" | 
|---|