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

BSDWKR7.m

Go to the documentation of this file.
  1. BSDWKR7 ;cmi/anch/maw - BSD Chart Request and Routing Slip Report 2/20/2007 2:42:22 PM
  1. ;;5.3;PIMS;**1007**;FEB 27, 2007
  1. ;
  1. ;cmi/anch/maw 2/20/2007 PATCH 1007 item 1007.25
  1. ;
  1. ASK ; -- ask user questions
  1. NEW VAUTC,VAUTD,POP,BSDBD,BSDED,BSDTT,BSDDET,BSDSUB,BSDSRT,BSDSEEN,Y
  1. ;
  1. S BSDSUB="C"
  1. ;
  1. S BSDBD=$$READ^BDGF("DO^::EX","Select First Date to Search") Q:'BSDBD
  1. S BSDED=$$READ^BDGF("DO^::EX","Select Last Date to Search") Q:'BSDED
  1. ;
  1. ; get clinic arrays based on subtotal category
  1. I (BSDSUB="C")!(BSDSUB="P") D CLINIC^BSDU(2) Q:$D(BSDQ)
  1. ;
  1. S BSDSRT=$$READ^BDGF("S^C:Clinic Name;P:Principal Clinic;O:Clinic Code;D:Date","Sort By","Clinic Name")
  1. Q:BSDSRT=U
  1. ;
  1. ;S BSDDET=$$READ^BDGF("Y","Subtotal sort criteria as well","NO","^D HELP1^BSDWKR7") Q:BSDDET=U
  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^BSDWKR7","ROUTING SLIP/CHART REQUEST","BSDDET;BSDSUB;BSDSRT;BSDBD;BSDED;VAUTC*;VAUTD*")
  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 RS/CR REPORT")
  1. D CLEAR^VALM1
  1. Q
  1. ;
  1. HDR ; -- header code
  1. S VALMHDR(1)=$$SP(19)_"Routing Slips and Chart Requests by Month"
  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("BSDWKR7",$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,BSDS,BSDSCD,BSDPC,BSDH
  1. I BSDSRT="C" S BSDH="CLINIC NAME"
  1. I BSDSRT="P" S BSDH="PRINCIPAL CLINIC"
  1. I BSDSRT="O" S BSDH="CLINIC CODE"
  1. I BSDSRT="D" S BSDH="DATE"
  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. . S BSDSCD=$$GET1^DIQ(44,CLN,8) ;clinic code
  1. . S BSDPC=$$GET1^DIQ(44,CLN,1916) ;principal clinic
  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
  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"
  1. ... Q:STATUS="FUTURE"
  1. ... Q:STATUS="NON-COUNT"
  1. ... Q:STATUS="DELETED"
  1. ... I BSDSRT="C" S BSDS=NAME
  1. ... I BSDSRT="P" S BSDS=$S(BSDPC]"":BSDPC,1:NAME)
  1. ... I BSDSRT="O" S BSDS=BSDSCD
  1. ... I BSDSRT="D" S BSDS=$$FMTE^XLFDT($P(APPT,"."))
  1. ... S BSDMON=$E($P(APPT,"."),1,5) ;get the month so I can count
  1. ... ;
  1. ... S TYPE=$$TYPE(CLN,APPT,APPN,PAT,STATUS,BSDH) ;type of appt
  1. ... K BSDRSP
  1. ... I $P($G(^DPT(PAT,"S",APPT,0)),U,7) S BSDRSP=1
  1. ... ;
  1. ... ; increment totals
  1. ... I TYPE=3 D Q
  1. .... D INCR(BSDS,BSDH,3,+$G(BSDRSP),BSDMON) ;count walkins
  1. ... D INCR(BSDS,BSDH,1,+$G(BSDRSP),BSDMON) ;count rs/sched
  1. . ;
  1. . ; -- then by appt date (within range)
  1. . S APCR=BSDBD,END=BSDED+.2400
  1. . F S APCR=$O(^SC(CLN,"C",APCR)) Q:'APCR!(APCR>END) D
  1. .. ;
  1. .. ; -- then find appts to count
  1. .. S APCN=0
  1. .. F S APCN=$O(^SC(CLN,"C",APCR,1,APCN)) Q:'APCN D
  1. ... S PAT=+^SC(CLN,"C",APCR,1,APCN,0) ;patient ien
  1. ... ;S STATUS=$$VAL^XBDIQ1(2.98,PAT_","_APCR,100) ;current status
  1. ... ;Q:STATUS["CANCEL"
  1. ... ;Q:STATUS="FUTURE"
  1. ... ;Q:STATUS="NON-COUNT"
  1. ... ;Q:STATUS="DELETED"
  1. ... I BSDSRT="C" S BSDS=NAME
  1. ... I BSDSRT="P" S BSDS=$S(BSDPC]"":BSDPC,1:NAME)
  1. ... I BSDSRT="O" S BSDS=BSDSCD
  1. ... I BSDSRT="D" S BSDS=$$FMTE^XLFDT($P(APCR,"."))
  1. ... S BSDMON=$E($P(APCR,"."),1,5) ;get the month so I can count
  1. ... ;
  1. ... ;S TYPE=$$TYPE(CLN,APPT,APPN,PAT,STATUS,BSDH) ;type of appt
  1. ... K BSDRSP
  1. ... I $P($G(^DPT(PAT,"S",APCR,0)),U,7) S BSDRSP=1
  1. ... ;
  1. ... ; increment totals
  1. ... D INCR(BSDS,BSDH,2,+$G(BSDRSP),BSDMON)
  1. ;
  1. ;
  1. N BSDDA,BSDRS
  1. S BSDDA=0 F S BSDDA=$O(^TMP("BSD",$J,BSDDA)) Q:BSDDA="" D
  1. . N BSDIEN
  1. . S BSDIEN=0 F S BSDIEN=$O(^TMP("BSD",$J,BSDDA,BSDIEN)) Q:BSDIEN="" D
  1. .. I BSDDA'="DATE" D SET("",.VALMCNT) ;cmi/anch/maw 8/14/2007 patch 1007
  1. .. I BSDDA'="DATE" D SET(BSDIEN,.VALMCNT) ;cmi/anch/maw 8/14/2007 patch 1007
  1. .. N BSDOEN
  1. .. S BSDOEN=0 F S BSDOEN=$O(^TMP("BSD",$J,BSDDA,BSDIEN,BSDOEN)) Q:'BSDOEN D
  1. ... ;D SET($$MON(BSDOEN),.VALMCNT)
  1. ... ;TODO FIX IF DATE SORT
  1. ... N BSDCR,BSDSA,BSDWI,RS
  1. ... S BSDRS=+$G(^TMP("BSD",$J,BSDDA,BSDIEN,BSDOEN,"RS"))
  1. ... S BSDCR=+$G(^TMP("BSD",$J,BSDDA,BSDIEN,BSDOEN,2))
  1. ... S BSDSA=+$G(^TMP("BSD",$J,BSDDA,BSDIEN,BSDOEN,1))
  1. ... S BSDWI=+$G(^TMP("BSD",$J,BSDDA,BSDIEN,BSDOEN,3))
  1. ... I BSDDA'="DATE" S LINE=$$MON(BSDOEN)_$$SP(9)_$$PAD(BSDRS,20) ;cmi/anch/maw 8/14/2007 patch 1007 added month print here
  1. ... I BSDDA="DATE" S LINE=BSDIEN_$$SP(4)_$$PAD(BSDRS,20) ;cmi/anch/maw 8/14/2007 patch 1007 added date print here
  1. ... S LINE=LINE_$$PAD(BSDCR,20)
  1. ... S LINE=LINE_$$PAD(BSDSA,15)
  1. ... S LINE=LINE_$$PAD(BSDWI,10)
  1. ... D SET(LINE,.VALMCNT)
  1. .. Q:BSDDA="DATE"
  1. .. N BSDCRS,BSDCCR,BSDCSA,BSDCWI
  1. .. S BSDCRS=+$G(^TMP("BSDS",$J,BSDDA,BSDIEN,"RS"))
  1. .. S BSDCCR=+$G(^TMP("BSDS",$J,BSDDA,BSDIEN,2))
  1. .. S BSDCSA=+$G(^TMP("BSDS",$J,BSDDA,BSDIEN,1))
  1. .. S BSDCWI=+$G(^TMP("BSDS",$J,BSDDA,BSDIEN,3))
  1. .. S LINE="Sub Total"_$$SP(8)_$$PAD(BSDCRS,20)
  1. .. S LINE=LINE_$$PAD(BSDCCR,20)
  1. .. S LINE=LINE_$$PAD(BSDCSA,15)
  1. .. S LINE=LINE_$$PAD(BSDCWI,10)
  1. .. D SET("",.VALMCNT)
  1. .. D SET(LINE,.VALMCNT)
  1. D SET("",.VALMCNT)
  1. D SET("REPORT TOTALS",.VALMCNT)
  1. N BSDRST,BSDCRT,BSDSAT,BSDWIT
  1. S BSDRST=+$G(^TMP("BSDTOT",$J,"RS"))
  1. S BSDCRT=+$G(^TMP("BSDTOT",$J,2))
  1. S BSDSAT=+$G(^TMP("BSDTOT",$J,1))
  1. S BSDWIT=+$G(^TMP("BSDTOT",$J,3))
  1. I BSDH="DATE" D
  1. . S LINE=$$SP(16)_$$PAD(BSDRST,20) ;cmi/anch/maw 8/14/2007 patch 1007
  1. I BSDH'="DATE" D
  1. . S LINE=$$SP(17)_$$PAD(BSDRST,20) ;cmi/anch/maw 8/14/2007 patch 1007
  1. S LINE=LINE_$$PAD(BSDCRT,20)
  1. S LINE=LINE_$$PAD(BSDSAT,15)
  1. S LINE=LINE_$$PAD(BSDWIT,10)
  1. D SET(LINE,.VALMCNT)
  1. K ^TMP("BSD",$J)
  1. K ^TMP("BSDTOT",$J)
  1. K ^TMP("BSDS",$J)
  1. Q
  1. ;
  1. TYPE(C,D,N,P,S,H) ; -- return type of appt.
  1. ; returns column #
  1. ; 1=appt, 2=chart request, 3=walk-in
  1. I S["NO-SHOW" Q 1 ;no-show
  1. I S["INPAT" Q 5 ;inpatient
  1. NEW X S X=$P($G(^DPT(P,"S",D,0)),U,7) I X=4 Q 3 ;walkin
  1. I (D\1)=($P($G(^SC(C,"C",D,1,N,9999999)),U,7)\1) Q 2 ;same day CR
  1. I H'="DATE",(D\1)'=($P($G(^SC(C,"C",D,1,N,9999999)),U,7)\1) Q 2 ;future CR
  1. I X=3,(D\1)=($P($G(^DPT(P,"S",D,0)),U,19)\1) Q 1 ;same day appt
  1. I H'="DATE",X=3,(D\1)'=($P($G(^DPT(P,"S",D,0)),U,19)\1) Q 1 ;future appt
  1. I X=3 Q 1 ;scheduled
  1. Q "??" ;error in case one slips thru
  1. ;
  1. INCR(SUB,SUBH,TYPE,RS,MON) ; increment totals
  1. Q:TYPE=5
  1. I RS D
  1. . S ^TMP("BSD",$J,SUBH,SUB,MON,"RS")=$G(^TMP("BSD",$J,SUBH,SUB,MON,"RS"))+1
  1. . S ^TMP("BSDS",$J,SUBH,SUB,"RS")=$G(^TMP("BSDS",$J,SUBH,SUB,"RS"))+1
  1. . S ^TMP("BSDTOT",$J,"RS")=$G(^TMP("BSDTOT",$J,"RS"))+1
  1. S ^TMP("BSD",$J,SUBH,SUB,MON,TYPE)=$G(^TMP("BSD",$J,SUBH,SUB,MON,TYPE))+1
  1. S ^TMP("BSDS",$J,SUBH,SUB,TYPE)=$G(^TMP("BSDS",$J,SUBH,SUB,TYPE))+1
  1. S ^TMP("BSDTOT",$J,TYPE)=$G(^TMP("BSDTOT",$J,TYPE))+1
  1. Q
  1. ;
  1. SET(LINE,NUM) ; -- sets display line into array
  1. S NUM=NUM+1
  1. S ^TMP("BSDWKR7",$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 print individual dates question
  1. D MSG^BDGF("The report will subtotal by Chart requests,",2,0)
  1. D MSG^BDGF("scheduled appointments, and walkins.",1,0)
  1. D MSG^BDGF("Answer YES to have it subtotal by sort criteria",1,0)
  1. D MSG^BDGF("as well.",1,1)
  1. Q
  1. ;
  1. EXIT ; -- exit code
  1. K ^TMP("BSDWKR7",$J)
  1. Q
  1. ;
  1. EXPND ; -- expand code
  1. Q
  1. ;
  1. PRINT ; print report to paper
  1. U IO D HDG
  1. NEW X S X=0 F S X=$O(^TMP("BSDWKR7",$J,X)) Q:'X D
  1. . I $Y>(IOSL-4) D HDG
  1. . W !,^TMP("BSDWKR7",$J,X,0)
  1. D ^%ZISC,EXIT
  1. Q
  1. ;
  1. HDG ; heading for paper report
  1. D HDR W @IOF,?30,"Routing Slip Statistics"
  1. F I=1:1 Q:'$D(VALMHDR(I)) W !,VALMHDR(I)
  1. W !,$$REPEAT^XLFSTR("-",80)
  1. W !,?10,"Routing Slips",?30,"Chart Requests",?50,"Sch Appts",?70,"Walkins"
  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. MON(MI) ;-- return external month
  1. S MY=$E(MI,1,3)+1700
  1. S MI=$E(MI,4,5)
  1. I MI="01" S MO="Jan"
  1. I MI="02" S MO="Feb"
  1. I MI="03" S MO="Mar"
  1. I MI="04" S MO="Apr"
  1. I MI="05" S MO="May"
  1. I MI="06" S MO="Jun"
  1. I MI="07" S MO="Jul"
  1. I MI="08" S MO="Aug"
  1. I MI="09" S MO="Sep"
  1. I MI="10" S MO="Oct"
  1. I MI="11" S MO="Nov"
  1. I MI="12" S MO="Dec"
  1. Q MO_" "_MY
  1. ;