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

PSBODL1.m

Go to the documentation of this file.
  1. PSBODL1 ;BIRMINGHAM/VRN-DUE LIST ;4/26/21 12:11
  1. ;;3.0;BAR CODE MED ADMIN;**5,9,32,28,68,70,83,106**;Mar 2004;Build 43
  1. ;Per VHA Directive 2004-038 (or future revisions regarding same), this routine should not be modified.
  1. ;
  1. ;*68 - print New unlimited Wp Special Instructions/OPI fields
  1. ;*70 - add Psbsrchl to HDR
  1. ;*83 - add Removes to the report that need attention.
  1. ;*106- add Hazardous Handle & Dispose flags
  1. ;
  1. EN ;
  1. N QQ
  1. S PSBFOHDR=0
  1. S PSBORD=0 F S PSBORD=$O(^TMP("PSBO",$J,DFN,PSBORD)) Q:PSBORD="" S PSBTYPE=$O(^TMP("PSBO",$J,DFN,PSBORD,"")) D
  1. .D CLEAN^PSBVT
  1. .D PSJ1^PSBVT(DFN,PSBORD)
  1. .I PSBSCHT="C" D Q:PSBADMIN=""
  1. ..S PSBX=PSBADST,PSBFLAG=1
  1. ..I PSBX="",PSBONX["V",PSBIVT'="P" S PSBFLAG=0
  1. ..S (PSBYES,PSBODD)=0
  1. ..S:$$PSBDCHK1^PSBVT1(PSBSCH) PSBYES=1
  1. ..F I=1:1 Q:$P(PSBSCH,"-",I)="" I $P(PSBSCH,"-",I)?2N!($P(PSBSCH,"-",I)?4N) S PSBYES=1
  1. ..I PSBYES,PSBADST="",PSBSCHT'="O",PSBSCHT'="OC",PSBSCHT'="P" Q
  1. ..I PSBFREQ="O" S PSBFREQ=1440
  1. ..I 'PSBYES,PSBADST="",PSBFREQ<1 Q
  1. ..I +PSBFREQ>0 I (PSBFREQ#1440'=0),(1440#PSBFREQ'=0) S PSBODD=1
  1. ..I PSBODD,PSBADST'="" Q
  1. ..D:PSBX=""
  1. ...I PSBIVT="C",PSBCHEMT="A" S PSBX="0000",PSBFLAG=0
  1. ...I PSBIVT="C",PSBISYR=0 S PSBX="0000",PSBFLAG=0
  1. ...I PSBIVT="S",PSBISYR=0 S PSBX="0000",PSBFLAG=0
  1. ...I "HA"[PSBIVT S PSBX="0000",PSBFLAG=0
  1. ..I ("SC"[PSBIVT),(PSBISYR=1) S PSBX=""
  1. ..I (PSBIVT="C"),(PSBCHEMT="P") S PSBX=""
  1. ..I PSBOTYP="U",PSBX="0000" S PSBX=""
  1. ..I PSBIVT="P",$G(PSBX)=0 S PSBX=""
  1. ..I PSBX="" S PSBX=$$GETADMIN^PSBVDLU1(DFN,PSBONX,PSBOST,PSBFREQ,PSBEVDT)
  1. ..E K ^TMP("PSB",$J,"GETADMIN") S ^TMP("PSB",$J,"GETADMIN",0)=PSBX
  1. ..S PSBADMIN=""
  1. ..F PSBXX=0:1 Q:'$D(^TMP("PSB",$J,"GETADMIN",PSBXX)) S PSBX=$G(^TMP("PSB",$J,"GETADMIN",PSBXX)) D
  1. ...F PSBY=1:1:$L(PSBX,"-") D
  1. ....Q:($P(PSBX,"-",PSBY)'?2N)&($P(PSBX,"-",PSBY)'?4N)
  1. ....S PSBAT=+(PSBODATE_"."_$P(PSBX,"-",PSBY))
  1. ....I PSBFLAG Q:PSBAT<PSBOSTRT!(PSBAT>PSBOSTOP) ; Report Window
  1. ....D VAL^PSBMLVAL(.PSBZ,DFN,PSBONX,PSBTYPE,PSBAT)
  1. ....S:$G(PSBFREQ)>29 PSBADMIN=PSBADMIN_$S(PSBADMIN]"":"-",1:"")_$P(PSBX,"-",PSBY)
  1. ....S:$G(PSBFREQ)<30 PSBADMIN="Due every "_$G(PSBFREQ)_" minutes."
  1. .I PSBSCHT'="C" S PSBADMIN=PSBADST
  1. .; Get LAST GIVEN date/time
  1. .S PSBLGDT="",X=""
  1. .F S X=$O(^PSB(53.79,"AOIP",DFN,+PSBOIT,X),-1) Q:'X D Q:PSBLGDT
  1. ..S PSBIEN=""
  1. ..F S PSBIEN=$O(^PSB(53.79,"AOIP",DFN,+PSBOIT,X,PSBIEN),-1) Q:PSBIEN="" D Q:PSBLGDT
  1. ...S:"MHNR"'[$P($G(^PSB(53.79,PSBIEN,0)),U,9) PSBLGDT=X
  1. .I $Y>(IOSL-12) I $Y<(IOSL-4) W !?(IOM-36\2),"(Medications Continued on Next Page)",$$FTR(),$$HDR()
  1. .I PSBSM S PSBSM=$S(PSBSMX:"H",1:"")_"SM"
  1. .E S PSBSM=""
  1. .I 'PSBFOHDR S PSBFOHDR=1 W $$HDR()
  1. .W !,$J(PSBSM,3),?6,PSBTYPE,$E(PSBSCHT,1,4),?12 S PSBWFLAG=1
  1. .S X="",Y=0
  1. .W $$WRAP(14,34,PSBOITX)
  1. .; *106 adds the hazardous handle/dispose notices
  1. .N PSBHAZ
  1. .S PSBHAZ=""
  1. .I PSBHAZHN=1 S PSBHAZ="<<HAZ Handle>> "
  1. .I PSBHAZDS=1 S PSBHAZ=PSBHAZ_"<<HAZ Dispose>>"
  1. .W:PSBHAZ]"" $$WRAP(14,45,PSBHAZ)
  1. .S PSBADM="Give: "_PSBDOSE_" "_PSBSCH
  1. .W $$WRAP(50,27,PSBADM)
  1. .W $$WRAP(78,6,PSBMR)
  1. .W ?85 I PSBLGDT W $E(PSBLGDT,4,5),"/",$E(PSBLGDT,6,7),"/",$E(PSBLGDT,2,3) W "@",$E($P(PSBLGDT,".",2)_"0000",1,4)
  1. .W ?100,$P($TR($$FMTE^XLFDT(PSBOST,2),"@"," ")," ")
  1. .W ?110,$P($TR($$FMTE^XLFDT(PSBOSP,2),"@"," ")," ")
  1. .W ?120,$S(PSBVPHI]"":PSBVPHI,1:"***"),"/",$S(PSBVNI]"":PSBVNI,1:"***")
  1. .W !,?100,"@"_$P(PSBOSTX," ",2),?110,"@"_$P(PSBOSPX," ",2)
  1. .W IOINHI ; To Highlight the Dispense Drugs...
  1. .I $D(PSBDDA) S Y=0 F S Y=$O(PSBDDA(Y)) Q:'Y D
  1. ..Q:$P(PSBDDA(Y),U,5)&($P(PSBDDA(Y),U,5)<PSBNOW)
  1. ..W !?14,"*",$$WRAP(15,33,$P(PSBDDA(Y),U,3)_" ("_+$P(PSBDDA(Y),U,2)_")")
  1. .I $D(PSBADA) S Y=0 F S Y=$O(PSBADA(Y)) Q:'Y W !?14,"*",$$WRAP(15,33,$P(PSBADA(Y),U,3)_" ("_$P(PSBADA(Y),U,4)_")")
  1. .I $D(PSBSOLA) S Y=0 F S Y=$O(PSBSOLA(Y)) Q:'Y W !?14,"*",$$WRAP(15,33,$P(PSBSOLA(Y),U,3)_" ("_$P(PSBSOLA(Y),U,4)_")")
  1. .W IOINORM ; Highlight Off
  1. .S PSBADM=$S(PSBADMIN]"":"Admin Times: "_PSBADMIN,1:"")
  1. .W:PSBADM]"" $$WRAP(50,27,PSBADM)
  1. .;;
  1. .;*68 begin
  1. .I PSBSIFLG,'$G(^TMP("PSJBCMA5",$J,DFN,PSBORD)) D
  1. ..W !?14,"Special Instructions:",?36,"<None Entered.>",DFN,U,PSBORD,"<"
  1. .D:PSBSIFLG
  1. ..F QQ=0:0 S QQ=$O(^TMP("PSJBCMA5",$J,DFN,PSBORD,QQ)) Q:'QQ D
  1. ...W:QQ=1 !?14,"Special Instructions:",?36,^TMP("PSJBCMA5",$J,DFN,PSBORD,QQ)
  1. ...W:QQ>1 !?36,^TMP("PSJBCMA5",$J,DFN,PSBORD,QQ)
  1. .W !,$TR($J("",IOM)," ","-")
  1. I '$G(PSBWFLAG) W !!,?10,"** NO SPECIFIED MEDICATIONS TO PRINT **"
  1. W:PSBFOHDR $$BLANKS(),$$FTR()
  1. K ^TMP("PSB",$J,"GETADMIN")
  1. Q
  1. ;
  1. WRAPPUP ;Do wrapping per PSBODL (Due List Report)
  1. ;
  1. N PSBHAZ
  1. W $$WRAP(14,34,PSBMED)
  1. ;*106 adds the hazardous handle/dispose notices
  1. S PSBHAZ=""
  1. I PSBHAZHN=1 S PSBHAZ="<<HAZ Handle>> "
  1. I PSBHAZDS=1 S PSBHAZ=PSBHAZ_"<<HAZ Dispose>>"
  1. W:PSBHAZ]"" $$WRAP(14,45,PSBHAZ)
  1. S PSBADM="Give: "_PSBDOSE_" "_PSBSCH
  1. W $$WRAP(50,27,PSBADM),?78,$$WRAP(78,6,PSBMR)
  1. W ?85 D:PSBLGDT
  1. .W $E(PSBLGDT,4,5),"/",$E(PSBLGDT,6,7),"/",$E(PSBLGDT,2,3),"@",$E($P(PSBLGDT,".",2)_"0000",1,4)
  1. W ?100,$P($TR($$FMTE^XLFDT(PSBOST,2),"@"," ")," "),?110,$P($TR($$FMTE^XLFDT(PSBOSP,2),"@"," ")," "),?120,$S(PSBVPHI]"":PSBVPHI,1:"***"),"/"
  1. W $S(PSBVNI]"":PSBVNI,1:"***"),!,?100,"@"_$P(PSBOSTX," ",2),?110,"@"_$P(PSBOSPX," ",2)
  1. W IOINHI
  1. I $D(PSBDDA) S Y=0 F S Y=$O(PSBDDA(Y)) Q:'Y D
  1. .Q:$P(PSBDDA(Y),U,5)&($P(PSBDDA(Y),U,5)<PSBNOW)
  1. .W !?14,"*",$$WRAP(15,33,$P(PSBDDA(Y),U,3)) ;_" ("_+$P(PSBDDA(Y),U,2)_")")
  1. I $D(PSBADA) S Y=0 F S Y=$O(PSBADA(Y)) Q:'Y W !?14,"*",$$WRAP(15,33,$P(PSBADA(Y),U,3)) ;_" ("_$P(PSBADA(Y),U,4)_")")
  1. I $D(PSBSOLA) S Y=0 F S Y=$O(PSBSOLA(Y)) Q:'Y W !?14,"*",$$WRAP(15,33,$P(PSBSOLA(Y),U,3)) ;_" ("_$P(PSBSOLA(Y),U,4)_")")
  1. W IOINORM ; Hlight Off
  1. S PSBADM=$S(PSBADMIN]"":"Admin Times: "_PSBADMIN,1:"")
  1. W:PSBADM]"" $$WRAP(50,27,PSBADM)
  1. ;
  1. ;Find associated remove with this ,med just printed on report
  1. ; use Tmp Gbl from Getremov call in PSBODL
  1. N IEN,RMA,RMTIM,RMDTTM,TIM,INDX
  1. F IEN=0:0 S IEN=$O(^TMP("PSB",$J,"RM","B",PSBORD,IEN)) Q:'IEN D
  1. .S RMTIM=$P(^TMP("PSB",$J,"RM",IEN),U,1)
  1. .;skip if this RMV does not fall witin report dates
  1. .Q:($P(RMTIM,".")<PSBEVDT)!($P(RMTIM,".")>PSBEVDT2)
  1. .S RMA(RMTIM)=""
  1. .;kill out used entires so won't use again at end of report time
  1. .K ^TMP("PSB",$J,"RM",IEN)
  1. K ^TMP("PSB",$J,"RM","B",PSBORD)
  1. ;
  1. S (RMDTTM,RMTIM)="",INDX=0
  1. F TIM=0:0 S TIM=$O(RMA(TIM)) Q:'TIM D
  1. .S INDX=INDX+1
  1. .S RMTIM=$E($P(TIM,".",2)_"0000",1,4)
  1. .S RMDTTM=$S(INDX=1:RMTIM,1:RMDTTM_"-"_RMTIM)
  1. W:RMDTTM]"" !?50,"Remove Time: "_RMDTTM
  1. ;
  1. ;*68 begin
  1. I PSBSIFLG,'$G(^TMP("PSJBCMA5",$J,DFN,PSBORD)) W !?14,"Special Instructions:",?36,"<None Entered.>"
  1. D:PSBSIFLG
  1. .F QQ=0:0 S QQ=$O(^TMP("PSJBCMA5",$J,DFN,PSBORD,QQ)) Q:'QQ D
  1. ..W:QQ=1 !?14,"Special Instructions:"
  1. ..W:QQ>1 !
  1. ..W ?36,^TMP("PSJBCMA5",$J,DFN,PSBORD,QQ)
  1. W !,$TR($J("",IOM)," ","-")
  1. Q
  1. ;
  1. WRAP(X,Y,Z) ; Quick text wrap
  1. F Q:'$L(Z) D
  1. .W:$X>X !
  1. .W:$X<X ?X
  1. .I $L(Z)<Y W Z S Z="" Q
  1. .F PSB=Y:-1:0 Q:$E(Z,PSB)=" "
  1. .S:PSB<1 PSB=Y
  1. .W $E(Z,1,PSB)
  1. .S Z=$E(Z,PSB+1,255)
  1. Q ""
  1. ;
  1. FTR() ; [Extrinsic] Page footer
  1. ;
  1. ; Sub Module Description:
  1. ; (No Description Available)
  1. ;
  1. I (IOSL<100) F Q:$Y>(IOSL-10) W !
  1. W !,$TR($J("",IOM)," ","=")
  1. S X="Ward: "_PSBHDR("WARD")_" Room-Bed: "_PSBHDR("ROOM")
  1. W !,PSBHDR("NAME"),?(IOM-11\2),PSBHDR("SSN"),?(IOM-$L(X)),X
  1. Q ""
  1. ;
  1. HDR() ; Page Header
  1. Q:'PSBFOHDR ""
  1. D PT^PSBOHDR(DFN,.PSBHDR,,,PSBSRCHL) ;*70
  1. W !
  1. W !
  1. W !,?(IOM-28\2),"***** FUTURE ORDERS *****"
  1. W !
  1. W !,"Self",?85,"Last",?100,"Start",?110,"Stop",?120,"Verifying"
  1. W !,"Med",?6,"Sched",?14,"Medication",?50,"Dose",?78,"Route",?85,"Given",?100,"Date",?110,"Date",?120,"Rph/Rn"
  1. W !,?100,"@Time",?110,"@Time"
  1. W !,$TR($J("",IOM)," ","-")
  1. Q ""
  1. ;
  1. BLANKS() ; [Extrinsic] Print blanks at end of printout for changes
  1. Q:'$P(PSBRPT(.2),U,5) ""
  1. W !
  1. I $Y>(IOSL-26) W ?(IOM-42\2),"(Changes/Addendums to Orders on Next Page)" W $$FTR(),$$HDR() ; Not enough space - new page
  1. I IOSL<100 F Q:$Y>(IOSL-26) W !
  1. W ?(IOM-28\2),"Changes/Addendums to orders"
  1. F X=1:1:4 D
  1. .W !,$TR($J("",IOM)," ","-")
  1. .W !!?3,"CON ___ PRN ___",?20,"Drug: ",$TR($J("",22)," ","_"),?50,"Give: ",$TR($J("",42)," ","_"),?100,"Start: _________ Stop: _________"
  1. .W !?20,"Spec"
  1. .W !?3,"OT ___ OC ___",?20,"Inst: ",$TR($J("",72)," ","_"),?100,"Initials: ______ Date: _________"
  1. W !,$TR($J("",IOM)," ","-")
  1. Q ""
  1. ;
  1. CHKREM ;Find RMs not yet triggered to print by the normal Admin time process
  1. ; these will be meds that have no more admins to do today, but a
  1. ; previous Give earlier today or from a prior day, still have a
  1. ; Remove pending
  1. N IEN,RMA,RMTIM,RMDTTM,TIM,INDX
  1. S ORD=""
  1. F S ORD=$O(^TMP("PSB",$J,"RM","B",ORD)) Q:ORD="" D
  1. .F IEN=0:0 S IEN=$O(^TMP("PSB",$J,"RM","B",ORD,IEN)) Q:'IEN D
  1. ..S RMTIM=$P(^TMP("PSB",$J,"RM",IEN),U,1)
  1. ..;skip if this RMV does not fall witin report dates
  1. ..Q:($P(RMTIM,".")<PSBEVDT)!($P(RMTIM,".")>PSBEVDT2)
  1. ..S RMA(RMTIM)=""
  1. .S (RMDTTM,RMTIM)="",INDX=0
  1. .F TIM=0:0 S TIM=$O(RMA(TIM)) Q:'TIM D
  1. ..S INDX=INDX+1
  1. ..S RMTIM=$E($P(TIM,".",2)_"0000",1,4)
  1. ..S RMDTTM=$S(INDX=1:RMTIM,1:RMDTTM_"-"_RMTIM)
  1. ..I RMDTTM]"" D WRAPREM
  1. .K RMA
  1. K ^TMP("PSB",$J,"RM")
  1. Q
  1. ;
  1. WRAPREM ;print standalone removes found
  1. N X,PSBIEN,PSBLGDT,PSBADM
  1. D CLEAN^PSBVT,PSJ1^PSBVT(DFN,ORD)
  1. ; Get LAST GIVEN date/time
  1. S PSBLGDT="",X=""
  1. F S X=$O(^PSB(53.79,"AOIP",DFN,+PSBOIT,X),-1) Q:'X D Q:PSBLGDT
  1. .S PSBIEN=""
  1. .F S PSBIEN=$O(^PSB(53.79,"AOIP",DFN,+PSBOIT,X,PSBIEN),-1) Q:PSBIEN="" D Q:PSBLGDT
  1. ..S:"MHNR"'[$P($G(^PSB(53.79,PSBIEN,0)),U,9) PSBLGDT=X
  1. ;
  1. I PSBSM D
  1. .S PSBSM=$S(PSBSMX:"H",1:"")_"SM"
  1. E D
  1. .S PSBSM=""
  1. W !!,$J(PSBSM,3),?6,PSBTYPE,$E(PSBSCHT,1,4),?12 S PSBWFLAG=1
  1. W $$WRAP(14,34,PSBOITX)
  1. S PSBADM="Give: "_PSBDOSE_" "_PSBSCH
  1. W $$WRAP(50,27,PSBADM),?78,$$WRAP(78,6,PSBMR)
  1. W ?85 D:PSBLGDT
  1. .W $E(PSBLGDT,4,5),"/",$E(PSBLGDT,6,7),"/",$E(PSBLGDT,2,3),"@",$E($P(PSBLGDT,".",2)_"0000",1,4)
  1. W ?100,$P($TR($$FMTE^XLFDT(PSBOST,2),"@"," ")," "),?110,$P($TR($$FMTE^XLFDT(PSBOSP,2),"@"," ")," "),?120,$S(PSBVPHI]"":PSBVPHI,1:"***"),"/"
  1. W $S(PSBVNI]"":PSBVNI,1:"***"),!,?100,"@"_$P(PSBOSTX," ",2),?110,"@"_$P(PSBOSPX," ",2)
  1. W IOINHI
  1. I $D(PSBDDA) S Y=0 F S Y=$O(PSBDDA(Y)) Q:'Y D
  1. .Q:$P(PSBDDA(Y),U,5)&($P(PSBDDA(Y),U,5)<PSBNOW)
  1. .W !?14,"*",$$WRAP(15,33,$P(PSBDDA(Y),U,3)) ;_" ("_+$P(PSBDDA(Y),U,2)_")")
  1. I $D(PSBADA) S Y=0 F S Y=$O(PSBADA(Y)) Q:'Y W !?14,"*",$$WRAP(15,33,$P(PSBADA(Y),U,3)) ;_" ("_$P(PSBADA(Y),U,4)_")")
  1. I $D(PSBSOLA) S Y=0 F S Y=$O(PSBSOLA(Y)) Q:'Y W !?14,"*",$$WRAP(15,33,$P(PSBSOLA(Y),U,3)) ;_" ("_$P(PSBSOLA(Y),U,4)_")")
  1. W IOINORM ; Hlight Off
  1. S PSBADM="Admin Times: none "
  1. W:PSBADM]"" $$WRAP(50,27,PSBADM)
  1. W !?50,"Remove Time: "_RMDTTM
  1. W !,$TR($J("",IOM)," ","-")
  1. D CLEAN^PSBVT
  1. Q