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

BDGSTAT1.m

Go to the documentation of this file.
  1. BDGSTAT1 ; IHS/ANMC/LJF - AVERAGE DAILY PATIENT LOAD ;
  1. ;;5.3;PIMS;;APR 26, 2002
  1. ;
  1. ;
  1. SELECT ; -- have user select report by ward or by service
  1. NEW BDGFRM,BDGBD,BDGED,BDGIA
  1. S BDGFRM=$$READ^BDGF("SO^1:By Ward;2:By Service","Select Format")
  1. Q:BDGFRM<1
  1. S BDGIA=$$READ^BDGF("Y","Include INACTIVE "_$S(BDGFRM=1:"Wards",1:"Services"),"NO")
  1. ;
  1. S BDGBD=$$READ^BDGF("DO^::EX","Select Beginning Date") Q:BDGBD<1
  1. S BDGED=$$READ^BDGF("DO^::EX","Select Ending Date") Q:BDGED<1
  1. ;
  1. ;
  1. D ZIS^BDGF("PQ","EN^BDGSTAT1","ADPL REPORT","BDGFRM;BDGBD;BDGED;BDGIA")
  1. Q
  1. ;
  1. ;
  1. EN ;EP; entry point from queuing
  1. I $E(IOST,1,2)="P-" D INIT,PRINT Q
  1. NEW VALMCNT D TERM^VALM0,CLEAR^VALM1
  1. D EN^VALM("BDG STAT ADPL"_BDGFRM)
  1. D CLEAR^VALM1
  1. Q
  1. ;
  1. HDR ; -- header code
  1. NEW X
  1. S X="For "_$$FMTE^XLFDT(BDGBD)_" through "_$$FMTE^XLFDT(BDGED)
  1. S VALMHDR(1)=$$SP(75-$L(X)\2)_X
  1. Q
  1. ;
  1. INIT ; -- init variables and list array
  1. NEW BDGDAYS
  1. K ^TMP("BDGSTAT1",$J)
  1. S VALMCNT=0
  1. S BDGDAYS=$$FMDIFF^XLFDT(BDGED,BDGBD)+1 ;# of days in date range
  1. ;
  1. D @BDGFRM ;gather ward or service stats for date range
  1. ;
  1. I '$D(^TMP("BDGSTAT1",$J)) D SET("No data found",.VALMCNT)
  1. ;
  1. Q
  1. ;
  1. 1 ; step thru ADT Census-Ward file for date range
  1. NEW WARD,WRDNM,DATE,BDGA,X,LINE,TOTAL
  1. S WARD=0
  1. F S WARD=$O(^BDGCWD(WARD)) Q:'WARD D
  1. . I BDGIA=0,'$D(^BDGWD(WARD)) Q ;old ward, no longer used
  1. . I BDGIA=0,$$GET1^DIQ(9009016.5,WARD,.03)="INACTIVE" Q
  1. . S WRDNM=$$GET1^DIQ(42,WARD,.01) ;ward name
  1. . ;
  1. . S DATE=BDGBD-.001
  1. . F S DATE=$O(^BDGCWD(WARD,1,DATE)) Q:DATE>BDGED Q:'DATE D
  1. .. ; count patients remaining and one day patients
  1. .. S X=$P($G(^BDGCWD(WARD,1,DATE,0)),U,2)+$P($G(^(0)),U,8)
  1. .. ; increment array for total inpatient days
  1. .. S BDGA(WRDNM)=$G(BDGA(WRDNM))+X
  1. ;
  1. ; put sorted data into display array
  1. S WARD=0 F S WARD=$O(BDGA(WARD)) Q:WARD="" D
  1. . S LINE=$$PAD(WARD,40)_$J(BDGA(WARD),5)
  1. . S LINE=$$PAD(LINE,65)_$J(BDGA(WARD)/BDGDAYS,5,2)
  1. . D SET(LINE,.VALMCNT)
  1. . ;
  1. . ; increment totals
  1. . S TOTAL=$G(TOTAL)+BDGA(WARD)
  1. ;
  1. ; put totals line into display array
  1. I $G(TOTAL) D
  1. . S LINE=$$PAD($$PAD("TOTALS",40)_$J(TOTAL,5),65)_$J(TOTAL/BDGDAYS,5,2)
  1. . D SET($$REPEAT^XLFSTR("=",80),.VALMCNT),SET(LINE,.VALMCNT)
  1. Q
  1. ;
  1. 2 ; step thru ADT Census-Treating Specialty file by date
  1. NEW SRV,DATE,SRVNM,BDGA,X,LINE,TOTAL,SUBTOT
  1. S SRV=0
  1. F S SRV=$O(^BDGCTX(SRV)) Q:'SRV D
  1. . ;
  1. . ; quit if not including inactive services; check begin & end dates
  1. . I BDGIA=0,('$$ACTSRV^BDGPAR(SRV,BDGBD)),('$$ACTSRV^BDGPAR(SRV,BDGED)) Q
  1. . S SRVNM=$$GET1^DIQ(45.7,SRV,.01) ;service name
  1. . ;
  1. . S DATE=BDGBD-.001
  1. . F S DATE=$O(^BDGCTX(SRV,1,DATE)) Q:DATE>BDGED Q:'DATE D
  1. .. ;
  1. .. ; count patients remaining and one day patients
  1. .. S X=$G(^BDGCTX(SRV,1,DATE,0))
  1. .. ;
  1. .. ; increment by adult vs. peds for total inpt days
  1. .. S BDGA(SRVNM,"A")=$G(BDGA(SRVNM,"A"))+$P(X,U,2)+$P(X,U,8)
  1. .. S BDGA(SRVNM,"P")=$G(BDGA(SRVNM,"P"))+$P(X,U,12)+$P(X,U,18)
  1. ;
  1. ; put sorted data into display array
  1. S SRV=0 F S SRV=$O(BDGA(SRV)) Q:SRV="" D
  1. . S LINE=$$PAD(SRV,35)_$J(+$G(BDGA(SRV,"A")),5) ;adult inpt days
  1. . S LINE=$$PAD(LINE,45)_$J(+$G(BDGA(SRV,"P")),5) ;peds inpt days
  1. . S SUBTOT=$G(BDGA(SRV,"A"))+$G(BDGA(SRV,"P")) ;total inpt days
  1. . S LINE=$$PAD($$PAD(LINE,55)_$J(SUBTOT,5),70)_$J(SUBTOT/BDGDAYS,5,2)
  1. . D SET(LINE,.VALMCNT)
  1. . ;
  1. . ; increment totals
  1. . S TOTAL("A")=$G(TOTAL("A"))+$G(BDGA(SRV,"A"))
  1. . S TOTAL("P")=$G(TOTAL("P"))+$G(BDGA(SRV,"P"))
  1. . S TOTAL=$G(TOTAL)+SUBTOT
  1. ;
  1. ; put totals line into display array
  1. S LINE=$$PAD("TOTALS",35)_$J(+$G(TOTAL("A")),5) ;adult
  1. S LINE=$$PAD(LINE,45)_$J(+$G(TOTAL("P")),5) ;peds
  1. S LINE=$$PAD(LINE,55)_$J($G(TOTAL),5) ;total
  1. S LINE=$$PAD(LINE,70)_$J($G(TOTAL)/BDGDAYS,5,2) ;adpl
  1. D SET($$REPEAT^XLFSTR("=",80),.VALMCNT),SET(LINE,.VALMCNT)
  1. Q
  1. ;
  1. SET(DATA,NUM) ; put data line into display array
  1. S NUM=NUM+1
  1. S ^TMP("BDGSTAT1",$J,NUM,0)=DATA
  1. Q
  1. ;
  1. PRINT ; print report to paper
  1. NEW BDGLN,BDGPG
  1. U IO D INIT^BDGF,HDG
  1. S BDGLN=0
  1. F S BDGLN=$O(^TMP("BDGSTAT1",$J,BDGLN)) Q:'BDGLN D
  1. . I $Y>(IOSL-4) D HDG
  1. . W !,^TMP("BDGSTAT1",$J,BDGLN,0)
  1. D ^%ZISC,PRTKL^BDGF,EXIT
  1. Q
  1. ;
  1. HELP ; -- help code
  1. S X="?" D DISP^XQORM1 W !!
  1. Q
  1. ;
  1. EXIT ; -- exit code
  1. Q
  1. ;
  1. EXPND ; -- expand code
  1. Q
  1. ;
  1. ;
  1. HDG ; print heading on paper
  1. S BDGPG=$G(BDGPG)+1 I BDGPG>1 W @IOF
  1. NEW X
  1. S X="AVERAGE DAILY PATIENT LOAD by "_$S(BDGFRM=1:"WARD",1:"SERVICE")
  1. W !,BDGTIME,?80-$L(X)/2,X,?71,"Page: ",BDGPG
  1. S X="For "_$$FMTE^XLFDT(BDGBD)_" through "_$$FMTE^XLFDT(BDGED)
  1. W !,BDGDATE,?(80-$L(X)\2),X,?76,BDGUSR
  1. W !,$$REPEAT^XLFSTR("-",80)
  1. I BDGFRM=1 W !,"Ward",?40,"Patient Days",?65,"ADPL"
  1. I BDGFRM=2 W !,"Service",?25,"Pat. Days: Adult",?45,"Peds",?55,"Total",?70,"ADPL"
  1. W !,$$REPEAT^XLFSTR("=",80)
  1. Q
  1. ;
  1. PAD(D,L) ;EP -- SUBRTN to pad length of data
  1. ; -- D=data L=length
  1. Q $E(D_$$REPEAT^XLFSTR(" ",L),1,L)
  1. ;
  1. SP(N) ; -- SUBRTN to pad N number of spaces
  1. Q $$PAD(" ",N)