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

BDGICS4.m

Go to the documentation of this file.
  1. BDGICS4 ; IHS/ANMC/LJF - WORKLOAD-COMPLETION TIMES ;
  1. ;;5.3;PIMS;**1005**;MAY 28, 2004
  1. ;IHS/OIT/LJF 04/14/2006 PATCH 1005 added observations to display
  1. ;
  1. NEW BDGTYP,BDGBD,BDGED,TYPE,BDGSRT
  1. ;
  1. ;IHS/OIT/LJF 04/14/2006 PATCH 1005 added observations
  1. ;S BDGTYP=$$READ^BDGF("SO^1:Inpatients;2:Day Surgeries","Select Visit Type to Include") Q:BDGTYP<1
  1. S BDGTYP=$$READ^BDGF("SO^1:Inpatients Only;2:Day Surgeries & Observations","Select Visit Type to Include") Q:BDGTYP<1
  1. ;
  1. S TYPE=$S(BDGTYP=1:"Discharge",1:"Surgery")
  1. S BDGBD=$$READ^BDGF("DO^::EP","Select Beginning "_TYPE_" Date")
  1. Q:BDGBD<1
  1. S BDGED=$$READ^BDGF("DO^::EP","Select Ending "_TYPE_" Date") Q:BDGED<1
  1. ;
  1. S BDGSRT=$$READ^BDGF("SO^1:Sort Alphabetically by Name;2:Sort by Terminal Digit","Select Patient Sort") Q:BDGSRT<1
  1. ;
  1. W !!,"If printing to paper, please use wide paper or condensed print"
  1. D ZIS^BDGF("PQ","EN^BDGICS4","IC WORKLOAD STATS","BDGTYP;BDGBD;BDGED;BDGSRT")
  1. Q
  1. ;
  1. EN ; -- main entry point for BDG IC WORKLOAD STATS
  1. I $E(IOST,1,2)="P-" S BDGPRT=1 D INIT,PRINT Q ;printing to paper
  1. NEW VALMCNT D TERM^VALM0,CLEAR^VALM1
  1. D EN^VALM("BDG IC WORKLOAD STATS")
  1. D CLEAR^VALM1
  1. Q
  1. ;
  1. HDR ; -- header code
  1. NEW X
  1. ;
  1. ;IHS/OIT/LJF 04/14/2006 PATCH 1005 added observations
  1. ;S X=$S(BDGTYP=1:"Inpatients",1:"Day Surgeries")
  1. S X=$S(BDGTYP=1:"Inpatients Only",1:"Day Surgeries & Observations")
  1. ;
  1. S VALMHDR(1)=$$SP(79-$L(X)\2)_X
  1. S X=$$RANGE^BDGF(BDGBD,BDGED)
  1. S VALMHDR(2)=$$SP(79-$L(X)\2)_X
  1. S VALMHDR(3)=$$SP(50)_$G(IOUON)_"# of Days until ..."_$G(IOUOFF)
  1. Q
  1. ;
  1. INIT ; -- init variables and list array
  1. I '$G(BDGPRT) D MSG^BDGF("Please wait while I compile the list...",2,0)
  1. K ^TMP("BDGICS4",$J),^TMP("BDGICS4A",$J)
  1. S VALMCNT=0
  1. NEW BDGCNT,BDGTOT,BDGNUM ;totals
  1. ;
  1. ; first find all by date range & sort by patient
  1. NEW DATE,END,BDGCNT,BDGTBP
  1. S BDGTBP=$$GET1^DIQ(9009020.1,+$$DIV^BSDU,.13,"I") ;track bill prep?
  1. S DATE=BDGBD-.0001,END=BDGED+.24
  1. ;
  1. ;IHS/OIT/LJF 04/14/2006 PATCH 1005 group observations with day surgeries
  1. ;I BDGTYP=1 D FIND("AD") ;gather inpatients & observation
  1. ;I BDGTYP=2 D FIND("AS") ;gather day surgeries
  1. I BDGTYP=1 D FIND("AD",0) ;gather inpatients
  1. I BDGTYP=2 D FIND("AS"),FIND("AD",1) ;gather day surgeries & observations
  1. ;
  1. ; now take sorted list and put into display array
  1. NEW SORT,IEN,LINE,PRV,NAME,STATUS,BDGI
  1. S SORT=0
  1. F S SORT=$O(^TMP("BDGICS4A",$J,SORT)) Q:SORT="" D
  1. . S IEN=0 F S IEN=$O(^TMP("BDGICS4A",$J,SORT,IEN)) Q:'IEN D
  1. .. ;
  1. .. S STATUS=^TMP("BDGICS4A",$J,SORT,IEN)
  1. .. ;
  1. .. ; build display line
  1. .. S LINE=$$PAD($$GET1^DIQ(9009016.1,IEN,.01),20) ;patient
  1. .. S LINE=LINE_$J($$GET1^DIQ(9009016.1,IEN,.011),8) ;chart #
  1. .. S LINE=$$PAD(LINE,30)_$$DATES(IEN) ;admit/surg date
  1. .. S LINE=$$PAD(LINE,45)
  1. .. ;
  1. .. ; find # of days until each stage was completed
  1. .. ; and increment counts for reporting averages
  1. .. S BDG1=$$IDATES(IEN,2) ;internal format for begin date
  1. .. F BDGI=2:1:8 D
  1. ... S X=$$DAYS(BDGI,IEN,BDG1) ;# of days
  1. ... S LINE=LINE_$J(X,3)_$$SP(5)
  1. ... I X S BDGTOT(BDGI)=$G(BDGTOT(BDGI))+X,BDGNUM(BDGI)=$G(BDGNUM(BDGI))+1
  1. .. ;
  1. .. D SET(LINE,.VALMCNT)
  1. ;
  1. D TOTALS
  1. ;
  1. I '$D(^TMP("BDGICS4",$J)) D SET("NO DATA FOUND",.VALMCNT)
  1. K ^TMP("BDGICS4A",$J)
  1. Q
  1. ;
  1. FIND(SUB,OBS) ; find all entries for date range;IHS/OIT/LJF 04/14/2006 PATCH 1005 added OBS
  1. ; SUB=subscript depending on visit type
  1. ; OBS=1 if SUB ="AD" but only observations are needed;IHS/OIT/LJF 04/14/2006 PATCH 1005
  1. NEW DATE,END,IEN,STATUS
  1. S DATE=BDGBD-.0001,END=BDGED+.24
  1. F S DATE=$O(^BDGIC(SUB,DATE)) Q:'DATE Q:(DATE>END) D
  1. . S IEN=0 F S IEN=$O(^BDGIC(SUB,DATE,IEN)) Q:'IEN D
  1. .. Q:$$GET1^DIQ(9009016.1,IEN,.17)]"" ;deleted entry
  1. .. ;
  1. .. ;IHS/OIT/LJF 04/14/2006 PATCH 1005 separate H and O visits
  1. .. I SUB="AD",OBS=0 Q:$$GET1^DIQ(9009016.1,IEN,.0392)'="HOSPITALIZATION"
  1. .. I SUB="AD",OBS=1 Q:$$GET1^DIQ(9009016.1,IEN,.0392)'="OBSERVATION"
  1. .. ;
  1. .. ; calculate entry's status (one of 8 categories)
  1. .. D STATUS(IEN) ;sets STATUS variable
  1. .. ;
  1. .. ; set sort value to patient name or chart #
  1. .. S SORT=$$GET1^DIQ(9009016.1,IEN,$S(BDGSRT=1:.01,1:.011))
  1. .. I BDGSRT=2 S SORT=$$HRCNT^BDGF2(SORT) ;convert to terminal digit
  1. .. ;
  1. .. S ^TMP("BDGICS4A",$J,SORT,IEN)=STATUS
  1. .. S BDGCNT=$G(BDGCNT)+1,BDGCNT(STATUS)=$G(BDGCNT(STATUS))+1
  1. Q
  1. ;
  1. STATUS(IEN) ; calculate entry's completion status
  1. ; Status: 1=newly incomplete, 2=chart recvd, 3=chart tagged
  1. ; 4=insurance identified, 5=ready to code, 6=coded, 7=completed
  1. ; 8=bill prepped (only used if track bill prep turned on
  1. ;
  1. NEW DATA
  1. D ENP^XBDIQ1(9009016.1,IEN,".11:.21","DATA(")
  1. S STATUS=1 ;initialize as newly incomplete
  1. I DATA(.14)]"" D Q ;if completed
  1. . S STATUS=$S(BDGTBP'=1:7,DATA(.15)]"":8,1:7) Q
  1. ;
  1. I DATA(.13)]"" S STATUS=6 Q ;coded
  1. I DATA(.12)]"" S STATUS=5 Q ;ready to code
  1. I DATA(.21)]"" S STATUS=4 Q ;insurance identified
  1. I DATA(.19)]"" S STATUS=3 Q ;tagged
  1. I DATA(.11)]"" S STATUS=2 Q ;chart received
  1. Q
  1. ;
  1. DATES(IEN) ; return dates for entry
  1. Q $P($$GET1^DIQ(9009016.1,IEN,.0211),"@")
  1. ;
  1. IDATES(IEN,NUM) ; return dates for entry in internal format
  1. ; NUM=1 for visit date, =2 for discharge date
  1. NEW X
  1. I NUM=2 S X=$$NUMDATE^BDGF($$GET1^DIQ(9009016.1,IEN,.02,"I")\1,1)
  1. I $G(X) Q X
  1. S X=$$GET1^DIQ(9009016.1,IEN,.03,"I") I 'X Q "??" ;visit ien
  1. Q $$NUMDATE^BDGF($$GET1^DIQ(9000010,X,.01,"I")\1,1) ;visit date
  1. ;
  1. DAYS(NUM,IEN,BEGIN) ; return # days for this stage of completion
  1. NEW DAYS,X,FIELD
  1. S FIELD=$P($T(FIELDS+NUM),";;",2) ;time field
  1. S X=$$GET1^DIQ(9009016.1,IEN,FIELD)
  1. Q $S(X="":"---",1:X) ;leave dashes if date not entered
  1. ;
  1. TOTALS ; display totals and averages
  1. NEW LINE,I,J,X
  1. D SET($$REPEAT^XLFSTR("=",80),.VALMCNT)
  1. ;
  1. ; display time averages
  1. S LINE=$$PAD($$SP(22)_"Averages:",40)
  1. F I=2:1:8 D
  1. . I '$G(BDGTOT(I)) S LINE=LINE_$$SP(8) Q
  1. . S X=BDGTOT(I)\BDGNUM(I),LINE=$$PAD(LINE,$L(LINE)+5)_$J(X,3)
  1. D SET(LINE,.VALMCNT),SET("",.VALMCNT)
  1. ;
  1. ; display total incomplete and completed charts
  1. F I=1:1:8 D
  1. . I I=7 D ;total incomplete charts
  1. .. S X=0 F J=1:1:6 S X=X+$G(BDGCNT(J))
  1. .. S LINE=$$PAD($$SP(10)_"TOTAL INCOMPLETE CHARTS:",40)_$J(X,6)
  1. .. D SET(LINE,.VALMCNT),SET("",.VALMCNT)
  1. . ;
  1. . Q:'$G(BDGCNT(I))
  1. . S LINE=$$PAD($$SP(10)_$P($T(STATNM+I),";;",2),40)_$J(BDGCNT(I),6)
  1. . D SET(LINE,.VALMCNT)
  1. ;
  1. S X=$G(BDGCNT(7))+$G(BDGCNT(8))
  1. S LINE=$$PAD($$SP(10)_"TOTAL COMPLETED CHARTS:",40)_$J(X,6)
  1. D SET(LINE,.VALMCNT)
  1. ;
  1. Q
  1. ;
  1. SET(DATA,NUM) ; puts display line into list template array
  1. S NUM=NUM+1
  1. S ^TMP("BDGICS4",$J,NUM,0)=DATA
  1. Q
  1. ;
  1. HELP ; -- help code
  1. S X="?" D DISP^XQORM1 W !!
  1. Q
  1. ;
  1. EXIT ; -- exit code
  1. K ^TMP("BDGICS4",$J) K BDGPRT
  1. Q
  1. ;
  1. EXPND ; -- expand code
  1. Q
  1. ;
  1. PRINT ; print report to paper
  1. NEW BDGX,BDGLN,BDGPG
  1. U IO D INIT^BDGF ;initialize heading variables
  1. D HDG
  1. ;
  1. ; loop thru display array
  1. S BDGX=0 F S BDGX=$O(^TMP("BDGICS4",$J,BDGX)) Q:'BDGX D
  1. . I $Y>(IOSL-4) D HDG
  1. . S BDGLN=^TMP("BDGICS4",$J,BDGX,0)
  1. . W !,BDGLN
  1. D ^%ZISC,PRTKL^BDGF,EXIT
  1. Q
  1. ;
  1. HDG ; heading for paper report
  1. S BDGPG=$G(BDGPG)+1 I BDGPG>1 W @IOF
  1. W !,BDGUSR,?11,"*****",$$CONF^BDGF,"*****"
  1. W !,BDGDATE,?25,"Incomplete Charts Workload Report",?70,"Page: ",BDGPG
  1. ;
  1. ;IHS/OIT/LJF 04/14/2006 PATCH 1005
  1. ;NEW X S X=$S(BDGTYP=1:"Inpatient Charts",1:"Day Surgery Charts")
  1. NEW X S X=$S(BDGTYP=1:"Inpatient Charts Only",1:"Day Surgery & Observation Charts")
  1. ;
  1. W !,BDGTIME,?(80-$L(X)\2),X
  1. W !,$$REPEAT^XLFSTR("-",80)
  1. W !,?50,"# of Days Until ..."
  1. W !?2,"Patient",?23,"HRCN",?30,"Dsch/Surg",?44,"Rcvd",?51,"Taggd"
  1. W ?59,"Insur",?67,"Ready",?75,"Coded",?82,"Complt",?90,"Bill Prep"
  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)
  1. ;
  1. FIELDS ;;
  1. ;;
  1. ;;.1191;;chart pickup time;;
  1. ;;.1991;;time to tag;;
  1. ;;.2191;;time to identify insurance;;
  1. ;;.1291;;prepare to code time;;
  1. ;;.1391;;coding time;;
  1. ;;.1491;;chart procesing time;;
  1. ;;.1591;;time in bill prep;;
  1. ;
  1. STATNM ;;
  1. ;;New Incomplete Charts;;
  1. ;;Incomplete-Received;;
  1. ;;Incomplete-Tagged;;
  1. ;;Incomplete-Insurance Identified;;
  1. ;;Incomplete-Ready to Code;;
  1. ;;Incomplete-In Code;;
  1. ;;Completed-In Bill Prep;;
  1. ;;Completed-Bill Prep Done;;