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

BSDWKR6.m

Go to the documentation of this file.
  1. BSDWKR6 ;cmi/anch/maw - BSD Turn Around Time Report 2/20/2007 2:41:31 PM
  1. ;;5.3;PIMS;**1007,1010,1011,1012,1019**;FEB 27, 2007;Build 3
  1. ;
  1. ;
  1. ;cmi/anch/maw 2/20/2007 PATCH 1007 item 1007.24
  1. ;cmi/flag/maw 11/19/2009 PATCH 1011 mods for PIMC in formatting
  1. ;
  1. ASK ; -- ask user questions
  1. NEW VAUTC,VAUTD,POP,BSDBD,BSDED,BSDSUB,Y
  1. ;
  1. S BSDSUB="C"
  1. ;
  1. ; get clinic arrays based on subtotal category
  1. ;S BSDSRT=$$READ^BDGF("S^D:Detailed;S:Summary","Select type of report")
  1. ;
  1. D CLINIC^BSDU(2) G EXIT:$D(BSDQ)
  1. ;I BSDSRT="S" D CLINIC^BSDU(2) G EXIT:$D(BSDQ)
  1. ;I BSDSRT="D" D ONE
  1. G EXIT:$D(BSDQ)
  1. ;
  1. S BSDBD=$$READ^BDGF("DO^::EX","Select First Date to Search") G EXIT:'BSDBD
  1. S BSDED=$$READ^BDGF("DO^::EX","Select Last Date to Search") G EXIT:'BSDED
  1. ;
  1. S BSDSRT=$$READ^BDGF("S^D:Detailed;S:Summary","Select type of report")
  1. ;
  1. S Y=$$BROWSE^BDGF Q:"PB"'[Y I Y="B" D EN Q ;browse in list mgr mode
  1. D ZIS^BDGF("PQ","START^BSDWKR6","TURN AROUND TIME","BSDDET;BSDSUB;BSDSRT;BSDSEEN;BSDBD;BSDED;VAUTC*;VAUTD*")
  1. Q
  1. ;
  1. ONE() ;-- get one clinic
  1. S VAUTC=0
  1. S DIC="^SC("
  1. S DIC(0)="AEMQZ"
  1. S DIC("A")="Select Clinic: "
  1. D ^DIC
  1. I Y<0 S BSDQ=1 Q
  1. S VAUTC(+Y)=$P(Y,U,2)
  1. Q
  1. ;
  1. START ;EP; -- re-entry for printing to paper
  1. D INIT,PRINT Q
  1. ;
  1. EN ; -- main entry point for BSDRM WORK STATS
  1. NEW VALMCNT D TERM^VALM0,CLEAR^VALM1
  1. D EN^VALM("BSDRM TAT REPORT")
  1. D CLEAR^VALM1
  1. Q
  1. ;
  1. HDR ; -- header code
  1. S VALMHDR(1)=$$SP(31)_"Turn Around Time"
  1. S VALMHDR(2)=$$SP(20)_"For dates: "_$$RANGE^BDGF(BSDBD,BSDED)
  1. Q
  1. ;
  1. INIT ; -- init variables and list array
  1. S VALMCNT=0 K ^TMP("BSDWKR6",$J),^TMP("BSD",$J)
  1. NEW BSDAR S BSDAR=$S(VAUTC:"^SC",1:"VAUTC")
  1. ;
  1. ; -- loop by clinic
  1. NEW CLN,NAME,SUB,APPT,APPN,PAT,STATUS,TYPE,SUB2,END,CHK,BSDCHKI,BSDCHKO,BSDCNT
  1. S CLN=0 F S CLN=$O(@BSDAR@(CLN)) Q:'CLN D
  1. . Q:'$$GET1^DIQ(44,CLN,3.5,"I") ;No Div entered for this clinic
  1. . I $D(VAUTD) Q:(VAUTD'=1&('$D(VAUTD($$GET1^DIQ(44,CLN,3.5,"I"))))) ;this Div notd
  1. . Q:$D(^SC("AIHSPC",CLN)) ;quit if principal clinic
  1. . ;S NAME=$$GET1^DIQ(44,CLN,.01) ;set clinic's name
  1. . ;D SET(NAME,.VALMCNT) ;setup the line with clinic name
  1. . ;
  1. . ; -- then by appt date (within range)
  1. . S APPT=BSDBD,END=BSDED+.2400
  1. . F S APPT=$O(^SC(CLN,"S",APPT)) Q:'APPT!(APPT>END) D
  1. .. ;
  1. .. ; -- then find appts to count
  1. .. S APPN=0,BSDCNT=0
  1. .. N APPDT
  1. .. S APPDT=0
  1. .. F S APPN=$O(^SC(CLN,"S",APPT,1,APPN)) Q:'APPN D
  1. ... S PAT=+^SC(CLN,"S",APPT,1,APPN,0) ;patient ien
  1. ... S STATUS=$$VAL^XBDIQ1(2.98,PAT_","_APPT,100) ;current status
  1. ... Q:STATUS["CANCEL" Q:STATUS="FUTURE"
  1. ... Q:STATUS="NON-COUNT" Q:STATUS="DELETED"
  1. ... S CHK=$G(^SC(CLN,"S",APPT,1,APPN,"C")) ;checkin node
  1. ... S BSDCHKI=$$LPAD($P(CHK,U),12)
  1. ... Q:'$G(BSDCHKI)
  1. ... S BSDCHKO=$$LPAD($P(CHK,U,3),12)
  1. ... N APPNA,APPTA
  1. ... S APPNA=$$LPAD($P(APPT,".",2),4)
  1. ... S APPTA=$P(APPT,".")
  1. ... S ^TMP("BSD",$J,CLN,APPTA,"IN")=$G(^TMP("BSD",$J,CLN,APPTA,"IN"))+1
  1. ... S ^TMP("BSD","D",$J,CLN,APPT,PAT)=BSDCHKI_U_BSDCHKO_U_$$GETTAT(BSDCHKI,BSDCHKO)
  1. ... I BSDCHKO D
  1. .... S ^TMP("BSD",$J,CLN,APPTA,"OUT")=$G(^TMP("BSD",$J,CLN,APPTA,"OUT"))+1
  1. .... S ^TMP("BSD",$J,CLN,APPTA,"TAT")=$G(^TMP("BSD",$J,CLN,APPTA,"TAT"))+$$GETTAT(BSDCHKI,BSDCHKO)
  1. N BSDDA
  1. S BSDDA=0 F S BSDDA=$O(^TMP("BSD",$J,BSDDA)) Q:'BSDDA D
  1. . S NAME=$$GET1^DIQ(44,BSDDA,.01) ;set clinic's name
  1. . D SET(NAME,.VALMCNT) ;setup the line with clinic name
  1. . N BSDIEN S BSDIEN=0 F S BSDIEN=$O(^TMP("BSD",$J,BSDDA,BSDIEN)) Q:'BSDIEN D
  1. .. N BSDCNTI,BSDCNTO,BSDTAT
  1. .. S BSDCNTI=$G(^TMP("BSD",$J,BSDDA,BSDIEN,"IN"))
  1. .. S BSDCNTO=$G(^TMP("BSD",$J,BSDDA,BSDIEN,"OUT"))
  1. .. S BSDTAT=$S($G(^TMP("BSD",$J,BSDDA,BSDIEN,"OUT")):$G(^TMP("BSD",$J,BSDDA,BSDIEN,"TAT"))/$G(^TMP("BSD",$J,BSDDA,BSDIEN,"OUT")),1:"")
  1. .. S LINE=$$PAD($$FMTE^XLFDT(BSDIEN),20)
  1. .. S LINE=LINE_$$PAD(BSDCNTI,20)
  1. .. S LINE=LINE_$$PAD(BSDCNTO,18)
  1. .. S LINE=LINE_$$PAD($$FMTT(BSDTAT),15)
  1. .. D SET(LINE,.VALMCNT)
  1. .. I BSDSRT="D" D
  1. ...S LINE=$$HDRD
  1. ...D SET(LINE,.VALMCNT)
  1. ...S LINE=$$REPEAT^XLFSTR("-",100)
  1. ...D SET(LINE,.VALMCNT)
  1. ...D DET(BSDDA,BSDIEN)
  1. ...D SET("",.VALMCNT)
  1. I BSDSRT="S" K ^TMP("BSD",$J) Q
  1. Q
  1. ;cmi/maw lines below no longer used
  1. D SET("",.VALMCNT)
  1. S LINE=$$HDRD
  1. D SET(LINE,.VALMCNT)
  1. S LINE=$$REPEAT^XLFSTR("-",100)
  1. D SET(LINE,.VALMCNT)
  1. N BSDDDA
  1. S BSDDDA=0 F S BSDDDA=$O(^TMP("BSD","D",$J,BSDDDA)) Q:'BSDDDA D
  1. . N BSDDIEN S BSDDIEN=0 F S BSDDIEN=$O(^TMP("BSD","D",$J,BSDDDA,BSDDIEN)) Q:'BSDDIEN D
  1. .. N BSDDOEN S BSDDOEN=0 F S BSDDOEN=$O(^TMP("BSD","D",$J,BSDDDA,BSDDIEN,BSDDOEN)) Q:BSDDOEN="" D
  1. ... N BSDDATA,BSDCI,BSDCO,BSDT
  1. ... S BSDDATA=$G(^TMP("BSD","D",$J,BSDDDA,BSDDIEN,BSDDOEN))
  1. ... S BSDCI=$P(BSDDATA,U)
  1. ... S BSDCO=$P(BSDDATA,U,2)
  1. ... S BSDT=$P(BSDDATA,U,3)
  1. ... S LINE=$$PAD($E($P($G(^DPT(BSDDOEN,0)),U),1,18),20)
  1. ... S LINE=LINE_$$PAD($$HRN^AUPNPAT(BSDDOEN,DUZ(2)),8)
  1. ... S LINE=LINE_$$PAD($$FMTE^XLFDT(BSDDIEN),20)
  1. ... S LINE=LINE_$$PAD($$FMTE^XLFDT(BSDCI),20)
  1. ... S LINE=LINE_$$PAD($$FMTE^XLFDT(BSDCO),20)
  1. ... S LINE=LINE_$$PAD($$FMTT(BSDT),11) ;cmi/maw 11/19/2009
  1. ... D SET(LINE,.VALMCNT)
  1. K ^TMP("BSD",$J)
  1. Q
  1. ;
  1. DET(BSDDDA,BSDDDIEN) ;-- print out the details
  1. N BSDEND
  1. S BSDEND=BSDDDIEN+.9999
  1. F S BSDDDIEN=$O(^TMP("BSD","D",$J,BSDDDA,BSDDDIEN)) Q:BSDDDIEN>BSDEND!('$G(BSDDDIEN)) D
  1. .N BSDDOEN S BSDDOEN=0 F S BSDDOEN=$O(^TMP("BSD","D",$J,BSDDDA,BSDDDIEN,BSDDOEN)) Q:BSDDOEN="" D
  1. .. N BSDDATA,BSDCI,BSDCO,BSDT
  1. .. S BSDDATA=$G(^TMP("BSD","D",$J,BSDDDA,BSDDDIEN,BSDDOEN))
  1. .. S BSDCI=$P(BSDDATA,U)
  1. .. S BSDCO=$P(BSDDATA,U,2)
  1. .. S BSDT=$P(BSDDATA,U,3)
  1. .. S LINE=$$PAD($E($P($G(^DPT(BSDDOEN,0)),U),1,18),20)
  1. .. S LINE=LINE_$$PAD($$HRN^AUPNPAT(BSDDOEN,DUZ(2)),8)
  1. .. S LINE=LINE_$$PAD($$FMTE^XLFDT(BSDDDIEN),20)
  1. .. S LINE=LINE_$$PAD($$FMTE^XLFDT(BSDCI),20)
  1. .. S LINE=LINE_$$PAD($$FMTE^XLFDT(BSDCO),20)
  1. .. S LINE=LINE_$$PAD($$FMTT(BSDT),11) ;cmi/maw 11/19/2009
  1. .. D SET(LINE,.VALMCNT)
  1. Q
  1. ;
  1. FMTT(T) ;-- reformat TAT
  1. N LT,LTI,M
  1. S LT=$L(T)
  1. ;S M=" min" cmi/maw 11/19/2009 PATCH 1011
  1. S M=" H:min" ;cmi/maw 11/19/2009 PATCH 1011
  1. S T=(T)\60_":"_$S($L((T)#60)<2:"0"_((T)#60),1:((T)#60)) ;cmi/maw 11/19/2009 PATCH 1011
  1. S T=$E(T,1,4) ;cmi/maw 6/9/2010 PATCH 1012
  1. I $L(T)=0 Q ""
  1. I $L(T)=1 Q T_" "_M
  1. I $L(T)=2 Q T_" "_M
  1. I $L(T)=3 Q T_" "_M
  1. I $L(T)=4 Q T_" "_M
  1. Q T_M
  1. ;
  1. LPAD(A,L) ;-- pad the length to 4 digits
  1. I A="" Q ""
  1. I $L(A)=12 Q A
  1. I $L(A)=11 Q A_"0"
  1. I $L(A)=10 Q A_"00"
  1. I $L(A)=4 Q A
  1. I $L(A)=3 Q A_"0"
  1. I $L(A)=2 Q A_"00"
  1. Q A_"000"
  1. ;
  1. GETTAT(I,O) ;-- calculate turnaround time
  1. I '$G(O) Q ""
  1. N IT,OT,ITH,ITM,OTH,OTM,ET,BT,TS,H,M,S
  1. S IT=$P(I,".",2)
  1. S OT=$P(O,".",2)
  1. S X=I
  1. D H^%DTC
  1. S ITH=%H
  1. S ITM=%T
  1. S X=O
  1. D H^%DTC
  1. S OTH=%H
  1. S OTM=%T
  1. S ET=OTH_","_OTM
  1. S BT=ITH_","_ITM
  1. ;I $D(ET) S TS=(86400*($P(ET,",")-$P(BT,",")))+($P(ET,",",2)-$P(BT,",",2)),H=$P(TS/3600,".") S:H="" H=0 D
  1. ;.S TS=TS-(H*3600),M=$P(TS/60,".") S:M="" M=0 S TS=TS-(M*60),S=TS
  1. I $D(ET) S TS=(86400*($P(ET,",")-$P(BT,",")))+($P(ET,",",2)-$P(BT,",",2)),H=$P(TS/3600,".") S:H="" H=0 D
  1. .;S TS=TS-(H*3600),M=$P(TS/60,".") S:M="" M=0 S TS=TS-(M*60),S=TS
  1. .S M=$P((TS/60),".") S:M="" M=0 ;cmi/maw 7/22/2010 patch 1012
  1. Q $G(M) ;cmi/maw 11/19/2009 PATCH 1011
  1. ;Q +$G(H)_"."_+$G(M)_"."_+$G(S)
  1. ;Q OT-IT ;cmi/maw TODO fix this calculation
  1. ;
  1. SET(LINE,NUM) ; -- sets display line into array
  1. S NUM=NUM+1
  1. S ^TMP("BSDWKR6",$J,NUM,0)=LINE
  1. Q
  1. ;
  1. HELP ; -- help code
  1. S X="?" D DISP^XQORM1 W !!
  1. Q
  1. ;
  1. HELP1 ;EP; help for subtotal question
  1. D MSG^BDGF("This report will display Turnaround Time for;",1,0)
  1. D MSG^BDGF("clinic(s). Turnaround time is the difference",1,0)
  1. D MSG^BDGF("between Checkin Time and Checkout Time. If there;",1,0)
  1. D MSG^BDGF("is not a checkout time, turnaround time is blank;",1,0)
  1. D MSG^BDGF(" Choose D to display a Detailed Report.",1,0)
  1. D MSG^BDGF(" Choose S to display a Summary Report.",1,0)
  1. Q
  1. ;
  1. EXIT ; -- exit code
  1. K ^TMP("BSDWKR6",$J),BSDQ,PAGE
  1. Q
  1. ;
  1. EXPND ; -- expand code
  1. Q
  1. ;
  1. PRINT ; print report to paper
  1. S PAGE=1
  1. U IO D HDG
  1. NEW BSDX S BSDX=0 F S BSDX=$O(^TMP("BSDWKR6",$J,BSDX)) Q:'BSDX D
  1. . I $Y>(IOSL-4) D
  1. ..S PAGE=PAGE+1
  1. ..;S Y=$$READ^BDGF("E","Press Return to Continue")
  1. ..I $E(IOST,1,1)="C" S Y=$$READ^BDGF("E","Press Return to Continue") ;ihs/cmi/maw 01/29/2016 PATCH 1019
  1. ..D HDG
  1. . W !,^TMP("BSDWKR6",$J,BSDX,0)
  1. D ^%ZISC,EXIT
  1. Q
  1. ;
  1. HDG ; heading for paper report
  1. D HDR W @IOF ;,?31,"Turnaround Time"
  1. F I=1:1 Q:'$D(VALMHDR(I)) W !,VALMHDR(I) I I=1 W ?70,$S($G(PAGE):"Page: "_$G(PAGE),1:"")
  1. W !,$$REPEAT^XLFSTR("-",80)
  1. W !,"Appt Date",?20,"Checked In",?40,"Checked Out",?58,"Avg TAT"
  1. W !,$$REPEAT^XLFSTR("=",80)
  1. Q
  1. ;
  1. HDGD ;-- do the header for the detailed report
  1. W !,$$REPEAT^XLFSTR("-",100)
  1. W !,"Patient Name",?20,"Chart",?28,"Appointment",?42,"Checkin",?59,"Checkout",?78,"TAT"
  1. W !,$$REPEAT^XLFSTR("=",100)
  1. Q
  1. ;
  1. HDRD() ;-- do the header
  1. N LN
  1. S LN=$$PAD("Patient Name",20)
  1. S LN=LN_$$PAD("Chart",8)
  1. S LN=LN_$$PAD("Appointment",20)
  1. S LN=LN_$$PAD("Check In",20)
  1. S LN=LN_$$PAD("Check Out",20)
  1. S LN=LN_$$PAD("TAT",10)
  1. Q LN
  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. ;