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

PSBIHS1.m

Go to the documentation of this file.
  1. PSBIHS1 ;KF/VAOIT PSB BCMA MOB ENTRY REPORT
  1. ;;1.0;PSB BCMA CPS FOXK;**1018**;;Build 27
  1. ASKDN ;ASK NURSE OR DIVISION
  1. S DIR(0)="SA^D:DIVISION;N:NURSING UNIT"
  1. S DIR("A")="Run this report by (D):Division or (N):Nursing Unit: "
  1. D ^DIR I X="^"!(X="") D STOP Q
  1. S PSBN=Y
  1. K DIR,Y,DIR("A"),DIR(0)
  1. I PSBN="N" D ASKNUR Q
  1. I PSBN="D" D ASK1 Q
  1. Q
  1. ASKNUR ;NURSE LOCATION
  1. S DIC(0)="AEMQMZ",DIC="^NURSF(211.4," D ^DIC I X="^"!(X="") D STOP Q Q:Y'>0
  1. S PSBNL=$P(Y,"^",1)
  1. I $P($G(^NURSF(211.4,PSBNL,1)),"^",1)'="A" W !,"You selePSBCTed a 'INAPSBCTIVE' Nurse Unit Please try again! " H 2 D ASKNUR Q
  1. D ST2
  1. Q
  1. ASK1 ;GET DIVS.
  1. S Y=$$SITE^VASITE
  1. S PSBDV=$P(Y,"^",1),PSBDVV(PSBDV)=""
  1. ST2 ;START AND END DATES
  1. S %DT("A")="Enter a Start Date: "
  1. S %DT="AE"
  1. D ^%DT I X="^"!(X="") D STOP Q
  1. S PSBBDATE=Y K %DT,Y
  1. I PSBBDATE<3030801 D Q
  1. .S Y=PSBBDATE D DD^%DT W !,"You entered "_Y_" Start Date must be After 'August 1, 2003" D ST2 Q
  1. K %DT,Y
  1. END K X
  1. S %DT("A")="Enter a End Date: ",PSBEDATE=""
  1. S %DT="AE"
  1. D ^%DT S PSBEDATE=Y K %DT,Y
  1. I X=""!(X="^") D STOP Q
  1. S X1=PSBEDATE,X2=1 D C^%DTC S PSBEDATE=X K X1,X2
  1. I PSBEDATE<PSBBDATE W !,"End Date must be after the start !" D END Q
  1. W !,"Print order details CPRS Med Order Button Yes/No?: "
  1. S %=1 D YN^DICN I X=""!(X="^") D STOP Q
  1. S PSBREP=0 ;DEFAULT NO
  1. I %=1 D
  1. .S PSBREP1=1
  1. .W !,"Would you like to include comments Yes/No?: "
  1. .S %=1 D YN^DICN I X=""!(X="^") D STOP Q
  1. .I %=1 S PSBCOM1=1
  1. .I %=2 S PSBCOM1=0
  1. ;.S %=1
  1. S PSBLN=1
  1. I %=2 S PSBREP1=0,PSBLN=0
  1. I '$D(PSBN) S PSBN=""
  1. I '$D(PSBNL) S PSBNL=""
  1. I '$D(PSBDV) S PSBDV=""
  1. I '$D(PSBVISN) S PSBVISN=""
  1. D TAS
  1. Q
  1. NTASK ;NIGHT TASK
  1. S X1=DT,X2=-1 D C^%DTC S PSBBDATE=X K X1,X2
  1. S PSBREP1=1,X1=DT,X2=1 D C^%DTC S PSBEDATE=X K X1,X2
  1. S PSBLN=1,PSBN="D"
  1. S Y=$$SITE^VASITE
  1. S PSBCOM1=0
  1. S PSBDV=$P(Y,"^",1),PSBDVV(PSBDV)=""
  1. I '$D(PSBN) S PSBN=""
  1. I '$D(PSBNL) S PSBNL=""
  1. I '$D(PSBDV) S PSBDV=""
  1. I '$D(PSBVISN) S PSBVISN=""
  1. U IO
  1. D NEW
  1. Q
  1. TAS ;TASK IT OR NOT
  1. S %ZIS="Q"
  1. W ! D ^%ZIS K %ZIS
  1. I POP D Q
  1. .W $C(7)
  1. .K VISN,PSBEDATE,PSBBDATE,PSBDV
  1. ; output not queued...
  1. I '$D(IO("Q")) D
  1. .D WAIT^DICD U IO D NEW
  1. .I IO'=IO(0) D ^%ZISC
  1. ; set up the Task...
  1. I $D(IO("Q")) D
  1. .N ZTDESC,ZTSAVE,ZTIO,ZTRTN
  1. .S ZTRTN="NEW^PSBIHS1"
  1. .S ZTDESC="PSB MOB ENTRY REPORT "
  1. .S ZTSAVE("PSBBDATE")=""
  1. .S ZTSAVE("PSBEDATE")=""
  1. .S ZTSAVE("PSBVISN")=""
  1. .S ZTSAVE("PSBDV")=""
  1. .S ZTSAVE("PSBREP1")=""
  1. .S ZTSAVE("PSBLN")=""
  1. .S ZTSAVE("PSBN")=""
  1. .S ZTSAVE("PSBNL")=""
  1. .S ZTSAVE("PSBDV*")=""
  1. .S ZTSAVE("PSBCOM1")=""
  1. .S ZTIO=ION
  1. .D ^%ZTLOAD
  1. .D HOME^%ZIS
  1. .W !,$S($G(ZTSK):"Task number "_ZTSK_" queued.",1:"ERROR -- NOT QUEUED!")
  1. .K IO("Q"),ZTSK
  1. Q
  1. NEW ;ALL PRNS
  1. K ^TMP($J),PSBNONEP
  1. S PSBCNT=0,PSBNONE=0,PSBCNTP=0,PSBNONEP=0
  1. NUR ;BLUID ARRAY BY NURS LOCATION
  1. I PSBN="N" D
  1. .S PSBNWARD=0 F S PSBNWARD=$O(^NURSF(211.4,PSBNL,3,PSBNWARD)) Q:PSBNWARD="" D
  1. ..S PSBNWD=$P($G(^NURSF(211.4,PSBNL,3,PSBNWARD,0)),"^",1)
  1. ..S PSBNWD($P($G(^DIC(42,PSBNWD,0)),"^",1))=""
  1. DIV1 ;BLGD ARRAY FOR WARDS IN THE DIV SELEPSBCTED
  1. I PSBN="D" D
  1. .K ^TMP($J,"DIV")
  1. .S PSBIEN=0 F S PSBIEN=$O(^DIC(42,PSBIEN)) Q:PSBIEN'>0 S PSBDIV=$P($G(^DIC(42,PSBIEN,0)),U,11) S:+PSBDIV ^TMP($J,"DIV",PSBDIV,PSBIEN)=""
  1. .S PSBNUM="" F S PSBNUM=$O(PSBDVV(PSBNUM)) Q:PSBNUM="" D
  1. ..K %,DIC,D,X,Y
  1. ..S DIC="^DG(40.8,",D="AD",X=PSBNUM,DIC(0)="XN"
  1. ..D IX^DIC Q:+Y'>0
  1. ..S PSBDIV1=+Y
  1. ..K DIC,D,X,Y
  1. ..;GET WARDS IN MED CENTER DIVION
  1. ..S PSBWIEN="" F S PSBWIEN=$O(^TMP($J,"DIV",PSBDIV1,PSBWIEN)) Q:PSBWIEN="" S PSBNWD($P($G(^DIC(42,PSBWIEN,0)),"^",1))=""
  1. K ^TMP($J) ;DONE WITH DIV USE TMP AGAIN
  1. STS ;LOOK IN MED FILE FOR DATA...
  1. N PSBPSBCTWD,PSBPSBCTWDN,PSBCT,PSBCTN,PSBCTNNLOC,PSBCTNLOC,PSBBC2,PSBLEN,PSBLEN1
  1. S PSBDFN="" F S PSBDFN=$O(^PSB(53.79,"AEDT",PSBDFN)) Q:PSBDFN'>0 D
  1. .S PSBDATE=PSBBDATE F S PSBDATE=$O(^PSB(53.79,"AEDT",PSBDFN,PSBDATE)) Q:PSBDATE'>0!(PSBDATE>PSBEDATE) D
  1. ..S PSBIEN="" F S PSBIEN=$O(^PSB(53.79,"AEDT",PSBDFN,PSBDATE,PSBIEN)) Q:PSBIEN'>0 D
  1. ...;CHECK PSBDIV FIRST
  1. ...S PSBDIV=$P($G(^PSB(53.79,PSBIEN,0)),"^",3)
  1. ...I PSBDIV="" Q
  1. ...S PSBLOC1=$P($G(^PSB(53.79,PSBIEN,0)),"^",2)
  1. ...S PSBSTOP=0
  1. ...S PSBLOC3="" F S PSBLOC3=$O(PSBNWD(PSBLOC3)) Q:PSBLOC3=""!(PSBSTOP=1) D
  1. ....I PSBLOC1[PSBLOC3 S PSBLEN=$L(PSBLOC3) S PSBLEN1=$E(PSBLOC1,1,PSBLEN) I PSBLOC3=PSBLEN1 S PSBSTOP=1,PSBLOC=PSBLOC3
  1. ...I PSBSTOP=0 Q
  1. ...I '$D(PSBPSBCTWD(PSBLOC)) S PSBPSBCTWD(PSBLOC)=0
  1. ...I '$D(PSBPSBCTWDN(PSBLOC)) S PSBPSBCTWDN(PSBLOC)=0
  1. ...I '$D(PSBCT(PSBDIV)) S PSBCT(PSBDIV)=0
  1. ...I '$D(PSBCTN(PSBDIV)) S PSBCTN(PSBDIV)=0
  1. ...S PSBWIEN=$O(^DIC(42,"B",PSBLOC,"")),PSBWDNU=""
  1. ...S PSBNLOCC="" F S PSBNLOCC=$O(^NURSF(211.4,"C",PSBWIEN,PSBNLOCC)) Q:PSBNLOCC="" D
  1. ....I $P($G(^NURSF(211.4,PSBNLOCC,1)),"^",1)="A" S PSBWDNU=$P($G(^SC($P($G(^NURSF(211.4,PSBNLOCC,0)),"^",1),0)),"^",1),PSBNLOC=PSBNLOCC
  1. ...I '$D(PSBCTNLOC(PSBNLOC)) S PSBCTNLOC(PSBNLOC)=0
  1. ...I '$D(PSBCTNNLOC(PSBNLOC)) S PSBCTNNLOC(PSBNLOC)=0
  1. ...I '$D(PSBCTNLOCP(PSBNLOC)) S PSBCTNLOCP(PSBNLOC)=0
  1. ...I '$D(PSBCTNNLOCP(PSBNLOC)) S PSBCTNNLOCP(PSBNLOC)=0
  1. ...S PSBBC2=0
  1. ...S PSBCNT=PSBCNT+1,PSBCT(PSBDIV)=PSBCT(PSBDIV)+1,PSBPSBCTWD(PSBLOC)=PSBPSBCTWD(PSBLOC)+1,PSBCTNLOC(PSBNLOC)=PSBCTNLOC(PSBNLOC)+1
  1. ...F PSBH=1:1:$P($G(^PSB(53.79,PSBIEN,.3,0)),"^",4) D
  1. ....I $G(^PSB(53.79,PSBIEN,.3,PSBH,0))["BCMA/CPRS Interface Entry" S PSBBC2=1,PSBNONE=PSBNONE+1,PSBCTN(PSBDIV)=PSBCTN(PSBDIV)+1,PSBCTNNLOC(PSBNLOC)=PSBCTNNLOC(PSBNLOC)+1,PSBPSBCTWDN(PSBLOC)=PSBPSBCTWDN(PSBLOC)+1
  1. ....I PSBBC2=1 D
  1. .....S PSBNAME=$P($G(^DPT($P($G(^PSB(53.79,PSBIEN,0)),"^",1),0)),"^",1)
  1. .....I PSBWDNU="" S PSBWDNU="NO 'N.U.' FOR WARD"
  1. .....S ^TMP($J,"PRN",PSBDIV,PSBWDNU,PSBLOC,PSBNAME,PSBIEN)=$G(^PSB(53.79,PSBIEN,0))
  1. REP ;DISPLAY DATA
  1. W @IOF
  1. W !,?15,"BCMA/EHR Med Order Button From " S Y=PSBBDATE D DD^%DT W Y_" TO " S X1=PSBEDATE,X2=-1 D C^%DTC S Y=X D DD^%DT S PSBREPT=Y W PSBREPT
  1. D NOW^%DTC S Y=% D DD^%DT S PSBRT=Y W !,?65,"Run Date/Time:"_PSBRT
  1. I PSBN="D" D
  1. .W !,?5,"SITE",?25,"TOTAL Med Logs",?45,"BCMA/CPRS Med Order Button Entry" ;?65,"% GUI Entered"
  1. .W ! F J=1:1:IOM W "-"
  1. .I PSBCNT=0 W !,"NONE FOUND" Q
  1. .S PSBDIV="" F J=0:0 S PSBDIV=$O(PSBCT(PSBDIV)) Q:PSBDIV="" D
  1. ..W !,$P($G(^DIC(4,PSBDIV,0)),"^",1)
  1. ..S PSBDT=$G(PSBCT(PSBDIV)),PSBDTN=$G(PSBCTN(PSBDIV)),PSBDD=PSBDT-PSBDTN
  1. ..I PSBDT>0 S PSBDPER=(PSBDD/PSBDT)*100
  1. ..I PSBDT=0 S PSBDPER=0
  1. ..W ?30,PSBDT,?50,PSBDTN ;?76,$E(PSBDPER,1,6)_"%"
  1. .W ! F J=1:1:IOM W "-"
  1. .S PSBDD=PSBCNT-PSBNONE,PSBTPER=(PSBDD/PSBCNT)*100
  1. .W !,"TOTALS",?30,PSBCNT,?50,PSBNONE ;,?76,$E(PSBTPER,1,6)_"%"
  1. .;WARD TOTALS
  1. .W !!!,?5,"WARD",?25,"TOTAL Med Logs",?45,"BCMA/CPRS Med Order Button Entry" ;,?70,"% GUI Entered"
  1. .W ! F J=1:1:IOM W "-"
  1. .I PSBCNT=0 W !,"NONE FOUND" Q
  1. .S PSBWARD="" F J=0:0 S PSBWARD=$O(PSBPSBCTWD(PSBWARD)) Q:PSBWARD="" D
  1. ..W !,PSBWARD
  1. ..S PSBDT=$G(PSBPSBCTWD(PSBWARD)),PSBDTN=$G(PSBPSBCTWDN(PSBWARD)),PSBDD=PSBDT-PSBDTN
  1. ..I PSBDT>0 S PSBDPER=(PSBDD/PSBDT)*100
  1. ..I PSBDT=0 S PSBDPER=0
  1. ..W ?30,PSBDT,?50,PSBDTN ;?76,$E(PSBDPER,1,6)_"%"
  1. .W ! F J=1:1:IOM W "-"
  1. ;Nursing Unit
  1. I PSBN="N" D
  1. .W !!,"By Nursing Unit"
  1. .W !!!,?5,"Nurse Unit",?25,"TOTAL Med Logs",?45,"BCMA/CPRS Med Order Button Entry" ;,?70,"% GUI Entered"
  1. .W ! F J=1:1:IOM W "-"
  1. .I PSBCNT=0 W !,"NONE FOUND" Q
  1. .S PSBNUT="" F S PSBNUT=$O(PSBCTNLOC(PSBNUT)) Q:PSBNUT="" D
  1. ..S PSBNUT1=PSBNUT
  1. ..S PSBNUTN=$P($G(^NURSF(211.4,PSBNUT,0)),"^",1),PSBNUTN=$P($G(^SC(PSBNUTN,0)),"^",1) W !,PSBNUTN
  1. ..S PSBDT=$G(PSBCTNLOC(PSBNUT)),PSBDTN=$G(PSBCTNNLOC(PSBNUT)),PSBDD=PSBDT-PSBDTN
  1. ..I PSBDT>0 S PSBDPER=(PSBDD/PSBDT)*100
  1. ..I PSBDT=0 S PSBDPER=0
  1. ..W ?30,PSBDT,?50,PSBDTN ;,?76,$E(PSBDPER,1,6)_"%"
  1. .S PSBNUTN=$P($G(^NURSF(211.4,PSBNUT1,0)),"^",1),PSBNUTN=$P($G(^SC(PSBNUTN,0)),"^",1) W !,PSBNUTN
  1. .S PSBDT=$G(PSBCTNLOCP(PSBNUT1)),PSBDTN=$G(PSBCTNNLOCP(PSBNUT1)),PSBDD=PSBDT-PSBDTN
  1. .I PSBDT>0 S PSBDPER=(PSBDD/PSBDT)*100
  1. .I PSBDT=0 S PSBDPER=0
  1. .W ?30,PSBDT,?50,PSBDTN ;,?76,$E(PSBDPER,1,6)_"%"
  1. .W ! F J=1:1:IOM W "-"
  1. .I PSBCNT=0 W !,"NONE FOUND" Q
  1. .S PSBDD=PSBCNT-PSBNONE,PSBTPER=(PSBDD/PSBCNT)*100
  1. .W !,"Report Totals",?30,PSBCNT,?50,PSBNONE ;,?76,$E(PSBTPER,1,6)_"%",!
  1. .I PSBDT=0 S PSBDPER=0
  1. I PSBREP1=1 D REP1
  1. D STOP
  1. Q
  1. W !,?15,"BCMA/CPRS Interface Entry in BCMA From " S Y=PSBBDATE D DD^%DT W Y_" TO " W PSBREPT
  1. W !,"Nurse Unit: "_PSBWDNU,?65,"Run Date/Time: "_PSBRT
  1. I PSBLN=0 W !,"NAME",?30,"HRN",?45,"DATE/TIME"
  1. I PSBLN=1 W !,"NAME",?30,"HRN",?45,"DATE/TIME",?65,"ADMIN BY"
  1. W ! F J=1:1:IOM W "-"
  1. K %
  1. Q
  1. REP1 S PSBWDNU=0
  1. S PSBDIV="" F J=0:0 S PSBDIV=$O(^TMP($J,"PRN",PSBDIV)) Q:PSBDIV="" D
  1. .S PSBWDNU="" F J=0:0 S PSBWDNU=$O(^TMP($J,"PRN",PSBDIV,PSBWDNU)) Q:PSBWDNU="" D
  1. ..I '$D(PSBONU) S PSBONU=PSBWDNU D HEAD
  1. ..I PSBWDNU'=PSBONU D HEAD
  1. ..S PSBLOC="" F J=0:0 S PSBLOC=$O(^TMP($J,"PRN",PSBDIV,PSBWDNU,PSBLOC)) Q:PSBLOC="" D
  1. ...F PSBNAME="" F J=0:0 S PSBNAME=$O(^TMP($J,"PRN",PSBDIV,PSBWDNU,PSBLOC,PSBNAME)) Q:PSBNAME="" D
  1. ....S PSBIEN="" F J=1:1 S PSBIEN=$O(^TMP($J,"PRN",PSBDIV,PSBWDNU,PSBLOC,PSBNAME,PSBIEN)) Q:PSBIEN="" D
  1. .....I $Y>(IOSL-4) D HEAD
  1. .....S DFN=$P($G(^TMP($J,"PRN",PSBDIV,PSBWDNU,PSBLOC,PSBNAME,PSBIEN)),"^",1)
  1. .....D DEM^VADPT,PID^VADPT
  1. .....S PSBPID=$S(DUZ("AG")="I":(VA("PID")),1:$E(VA("PID"),$L(VA("PID"))-3,999))
  1. .....S Y=$P($G(^TMP($J,"PRN",PSBDIV,PSBWDNU,PSBLOC,PSBNAME,PSBIEN)),"^",6) D DD^%DT S PSBMT=Y
  1. .....S PSBDRUG=$P($G(^PS(50.7,$P($G(^TMP($J,"PRN",PSBDIV,PSBWDNU,PSBLOC,PSBNAME,PSBIEN)),"^",8),0)),"^",1) S PSBDRUG=$E(PSBDRUG,1,35)
  1. .....S PSBNUR=$P($G(^TMP($J,"PRN",PSBDIV,PSBWDNU,PSBLOC,PSBNAME,PSBIEN)),"^",7) S PSBNUR=$P($G(^VA(200,PSBNUR,0)),"^",1) S PSBNUR=$E(PSBNUR,1,32)
  1. .....I PSBLN=0 W !,PSBNAME,?30,PSBPID,?40,PSBMT
  1. .....I PSBLN=1 W !,PSBNAME,?30,PSBPID,?40,PSBMT,?63,PSBNUR,!,?15,"Medication: ",PSBDRUG,?50,"Dosage: ",$P($G(^PSB(53.79,PSBIEN,.1)),"^",5)
  1. .....D ORNUM ;PRINT IEN FROM 100
  1. .....I $D(^PSB(53.79,PSBIEN,.6,0)) D
  1. ......W !,?15,"Additives:"
  1. ......F J=1:1:$P(^PSB(53.79,PSBIEN,.6,0),"^",4) W !,?27,$P(^PSB(53.79,PSBIEN,.6,J,0),"^",2)," ",$P(^PSB(53.79,PSBIEN,.6,J,0),"^",3)
  1. .....I $D(^PSB(53.79,PSBIEN,.7,0)) D
  1. ......W !,?15,"Solutions:"
  1. ......F J=1:1:$P(^PSB(53.79,PSBIEN,.7,0),"^",4) W !,?27,$P(^PSB(53.79,PSBIEN,.7,J,0),"^",2)," ",$P(^PSB(53.79,PSBIEN,.7,J,0),"^",3)
  1. .....I PSBCOM1=1 D COM
  1. .....W !
  1. ..S PSBONU=PSBWDNU
  1. D STOP Q
  1. COM ;LOOPS FOR COMMENTS HELD
  1. N PSBNUM,PSBCOMB,PSBCOMT,PSBCOM
  1. W !,?15,"Comments:---------------------------------------------------------"
  1. S PSBNUM=0 F S PSBNUM=$O(^PSB(53.79,PSBIEN,.3,PSBNUM)) Q:PSBNUM'>0 D
  1. .S PSBCOM=$P($G(^PSB(53.79,PSBIEN,.3,PSBNUM,0)),"^",1)
  1. .S PSBCOMB=$P($G(^PSB(53.79,PSBIEN,.3,PSBNUM,0)),"^",2) S PSBCOMB=$P($G(^VA(200,PSBCOMB,0)),"^",2)
  1. .S Y=$P($G(^PSB(53.79,PSBIEN,.3,PSBNUM,0)),"^",3) D DD^%DT S PSBCOMT=Y
  1. .W !,?25,PSBCOMT_" "_PSBCOMB
  1. .W !,?25,PSBCOM
  1. W !,?25,"---------------------------------------------------------"
  1. Q
  1. ORNUM ;GET CPRS ORDER NUMBER
  1. S PSBORN=$P($G(^PSB(53.79,PSBIEN,.1)),"^",1)
  1. I PSBORN["U" S PSBORN=$P($G(^PS(55,DFN,5,+PSBORN,0)),"^",21)
  1. I PSBORN["V" S PSBORN=$P($G(^PS(55,DFN,"IV",+PSBORN,0)),"^",21)
  1. W !,?15,"EHR Order Number: ",PSBORN
  1. Q
  1. STOP ;
  1. K PSBDATE,PSBDFN,PSBDPER,PSBDT,PSBDTN,PSBEDATE,PSBBDATE,PSBLOC,PSBNAME,PSBSSN,PSBMT,PSBLOC3,PSBNUT1
  1. K PSBDRUG,PSBNONE,PSBVISN,PSBTPER,J,PSBIEN,PSBDIV,PSBOWD,PSBWD,PSBRT,PSBREP1,PSBREPT,PSBWARD,PSBPSBCTWD,PSBPSBCTWDN,PSBDD,PSBNUR,PSBLN,PSBNL,PSBN,PSBNWD,PSBNWARD,PSBDV,DIC,DIR,PSBSTOP
  1. K PSBLOC1,PSBLOC2,PSBNLOC,PSBNLOCC,PSBNUT,PSBNUTN,PSBWIEN,POP,PSBCTNLOC,PSBCTNNLOC,PSBF,PSBWD,PSBWDIEN,PSBWDNU,PSBONU,PSBNS,PSBDIV1,PSBDVV,PSBNUM,PSBPID,PSBREP
  1. K PSBCNT,PSBCNTP,PSBCTNLOCP,PSBCTNNLOCP,DFN,PSBH,PSBORN,PSBCOM1,PSBNONEP
  1. Q Q