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

SCRPW3.m

Go to the documentation of this file.
  1. SCRPW3 ;RENO/KEITH,BWF - Clinic Utilization Statistical Summary (cont.) ;MAY 13, 2023
  1. ;;5.3;Scheduling;**139,144,184,194,540,562,845**;AUG 13, 1993;Build 8
  1. START ;Print statistics
  1. F S SDCLN=$O(^TMP("SCRPW",$J,SDIV,1,SDCLN)) Q:SDCLN=""!SDOUT S SDCL=0 F S SDCL=$O(^TMP("SCRPW",$J,SDIV,1,SDCLN,SDCL)) Q:'SDCL!SDOUT D CLINE
  1. Q:SDOUT D:$Y>(IOSL-12) FOOT^SCRPW2,HDR^SCRPW2 Q:SDOUT W ! F SDI=1:1:8 W ?(22+(SDI*10)),"--------"
  1. W ?112,"--------- ---------",!,"*** CLINIC TOTALS ***" S SDCT=SDTAP_U_SDTOB_U_SDTSL_U_SDTNS_U_SDTVSL_U_SDTNSVS_U_SDTOS
  1. D F1 D FOOT^SCRPW2 Q:'$D(^TMP("SCRPW",$J,SDIV,2))
  1. D HDR^SCRPW2 Q:SDOUT W !!,"*** PROVIDER SUMMARY (based on clinic default provider definition) ***"
  1. S SDPRN="" F S SDPRN=$O(^TMP("SCRPW",$J,SDIV,2,SDPRN)) Q:SDPRN=""!SDOUT S SDPR=0 F S SDPR=$O(^TMP("SCRPW",$J,SDIV,2,SDPRN,SDPR)) Q:'SDPR!SDOUT D PLINE
  1. Q:SDOUT D FOOT^SCRPW2
  1. Q
  1. ;
  1. STOP ;Check for stop task request
  1. S:$G(ZTQUEUED) (SDOUT,ZTSTOP)=$S($$S^%ZTLOAD:1,1:0)
  1. Q
  1. ;
  1. AC ;Evaluate all clinics
  1. S SDCL=0 F S SDCL=$O(^SC(SDCL)) Q:'SDCL S SDCL0=^SC(SDCL,0),SDIV=$P(SDCL0,U,15),SDAC=0 I $$DIV() D STOP Q:SDOUT D A1 D:SDAC CNT,SET
  1. Q
  1. ;
  1. A1 Q:$P(SDCL0,U,3)'="C" S SDCLI=$G(^SC(SDCL,"I")) Q:(($P(SDCLI,U)>0)&($P(SDCLI,U)<SDBDAY)&($P(SDCLI,U,2)=""!($P(SDCLI,U,2)>SDEDAY))) S SDAC=1
  1. Q
  1. ;
  1. SC ;Evaluate selected clinics
  1. S SDCL=0 F S SDCL=$O(SDCL(SDCL)) Q:'SDCL S SDCL0=^SC(SDCL,0),SDIV=$P(SDCL0,U,15),SDAC=0 I $$DIV() D STOP Q:SDOUT D A1 D:SDAC CNT,SET
  1. Q
  1. ;
  1. RC ;Evaluate a range of clinics
  1. S SDCLN=$O(SDCL("")),SDECL=$O(SDCL(SDCLN)),SDCL=SDCL(SDCLN),SDCL0=^SC(SDCL,0),SDIV=$P(SDCL0,U,15),SDAC=0 I $$DIV() D STOP Q:SDOUT D A1 D:SDAC CNT,SET
  1. F S SDCLN=$O(^SC("B",SDCLN)) Q:(SDCLN=""!(SDCLN]SDECL)) S SDCL=0 F S SDCL=$O(^SC("B",SDCLN,SDCL)) Q:'SDCL S SDCL0=^SC(SDCL,0),SDIV=$P(SDCL0,U,15),SDAC=0 I $$DIV() D STOP Q:SDOUT D A1 D:SDAC CNT,SET
  1. Q
  1. ;
  1. RS ;Evaluate a range of stop codes
  1. S SDBCS=$O(SDCL("")),SDECS=$O(SDCL(SDBCS)),SDCL=0 S:'SDECS SDECS=SDBCS F S SDCL=$O(^SC(SDCL)) Q:'SDCL S SDCL0=^SC(SDCL,0),SDIV=$P(SDCL0,U,15),SDAC=0 I $$DIV() D STOP Q:SDOUT D A1 D:SDAC RC1
  1. Q
  1. ;
  1. RC1 S SDCSC=$P(SDCL0,U,7),SDCSC=$P($G(^DIC(40.7,+SDCSC,0)),U,2) Q:('SDCSC!(SDCSC<SDBCS!(SDCSC>SDECS))) D CNT,SET
  1. Q
  1. ;
  1. CG ;Evaluate by clinic group
  1. S SDCG=$O(SDCL(0)),SDCL=0 F S SDCL=$O(^SC("ASCRPW",SDCG,SDCL)) Q:'SDCL S SDCL0=^SC(SDCL,0),SDIV=$P(SDCL0,U,15),SDAC=0 I $$DIV() D STOP Q:SDOUT D A1 D:SDAC CNT,SET
  1. Q
  1. ;
  1. DIV() ;Check division
  1. S:'$L(SDIV) SDIV=$$PRIM^VASITE()
  1. Q:'SDDIV 1 Q $D(SDDIV(+SDIV))
  1. ;
  1. CNT ;Evaluate a clinic
  1. S SDDAY=SDBDAY-1,(SDVSL,SDAP,SDF1,SDOB,SDSL,SDNS,SDNSVS,SDOS)=0,SDLAP=$P($G(^SC(SDCL,"SL")),U)
  1. D SPAT(SDCL,SDBDAY,SDMAX),CCPAT S SDOB=SDAP-SDSL S:SDOB<0 SDOB=0
  1. Q
  1. ;
  1. CCPAT ;Count clinic patterns and patients
  1. F S SDDAY=$O(^TMP(SDSUB,$J,SDCL,"ST",SDDAY)) Q:('SDDAY!(SDDAY>SDEDAY)) D CTPAT(SDDAY)
  1. S SDDAY=SDBDAY F S SDDAY=$O(^SC(SDCL,"S",SDDAY)) Q:('SDDAY!(SDDAY>SDEDAY)) S SDI=0 F S SDI=$O(^SC(SDCL,"S",SDDAY,1,SDI)) Q:'SDI S SDCP0=$G(^SC(SDCL,"S",SDDAY,1,SDI,0)) D:$L(SDCP0) ACT
  1. Q
  1. ;
  1. CTPAT(SDDAY) ;Count slots in availability pattern and master pattern
  1. ;Input: SDDAY=date to evaluate
  1. N SDPATT,SDPCT,SDFLAG,SDHLDPAT ;SD*562 added last 2 variables
  1. S SDPATT=$E($G(^TMP(SDSUB,$J,SDCL,"ST",SDDAY,1)),6,999) Q:SDPATT'["["
  1. S SDFLAG=0 I SDPATT["X" S SDFLAG=1,SDHLDPAT=SDPATT ;SD*562 check for partial canx
  1. S SDF1=1,SDOS=SDOS+$$PCT(SDPATT)
  1. S SDPATT=$E($G(^SC(SDCL,"OST",SDDAY,1)),6,999) I $L(SDPATT) S:SDPATT["X" SDFLAG=1,SDHLDPAT=SDPATT D:SDFLAG ADJUST S SDSL=SDSL+$$PCT(SDPATT) Q ;SD*562 check for partially cancelled day
  1. N X,%H,%T,%Y,SDDW,SDMPDT
  1. S X=SDDAY D H^%DTC S SDDW="T"_%Y,SDMPDT=$O(^SC(SDCL,SDDW,SDDAY))
  1. I SDMPDT S SDPATT=$G(^SC(SDCL,SDDW,SDMPDT,1)) D:SDFLAG ADJUST S SDPCT=$$PCT(SDPATT) I SDPCT S SDSL=SDSL+SDPCT ;SD*562 added API ADJUST to calculate clinic capacity for partially cancelled day
  1. Q
  1. ;
  1. PCT(SDPATT) ;Pattern count
  1. ;Input: SDPATT=pattern to evaluate
  1. N X,I S X=0
  1. S SDPATT=$TR(SDPATT," |[]","")
  1. F I=1:1:$L(SDPATT) S X=X+$G(SD($E(SDPATT,I)))
  1. Q X
  1. ;
  1. ADJUST ;SD*562 calculate clinic capacity for partially cancelled day
  1. ;SDHLDPAT equals updated pattern from "ST" node
  1. ;SDPATT equals Master Pattern for day
  1. S SDUP="",SDUP=SDHLDPAT,CT=0
  1. S SDUP=$TR(SDUP," |[]","")
  1. F I=1:1:$L(SDUP) I $E(SDUP,I)'="X" S CT=CT+1
  1. S SDPATT=$TR(SDPATT," |[]","")
  1. S SDPATT=$E(SDPATT,1,CT)
  1. K CT,SDUP,I
  1. Q
  1. ;
  1. SET ;Set stats into ^TMP global
  1. S SDPR=0 I SDF1 S SDPR=$O(^SC("ADPR",SDCL,SDPR)),SDPR=$P($G(^SC(SDCL,"PR",+SDPR,0)),U) I SDPR S SDPRN=$P($G(^VA(200,SDPR,0)),U) S:'$L(SDPRN) SDPR=0
  1. D SET1(SDIV) D:SDMD SET1(0)
  1. Q
  1. ;
  1. SET1(SDIV) S ^TMP("SCRPW",$J,SDIV,1,$P(SDCL0,U),SDCL)=$S('SDF1:"",1:SDAP_U_SDOB_U_SDSL_U_SDNS_U_SDVSL_U_SDNSVS_U_SDOS)
  1. Q:'SDPR S SDPCT=$G(^TMP("SCRPW",$J,SDIV,2,SDPRN,SDPR))
  1. S ^TMP("SCRPW",$J,SDIV,2,SDPRN,SDPR)=($P(SDPCT,U)+SDAP)_U_($P(SDPCT,U,2)+SDOB)_U_($P(SDPCT,U,3)+SDSL)_U_($P(SDPCT,U,4)+SDNS)_U_($P(SDPCT,U,5)+SDVSL)_U_($P(SDPCT,U,6)+SDNSVS)_U_($P(SDPCT,U,7)+SDOS)
  1. Q
  1. ;
  1. CLINE ;Print a clinic statistics line
  1. D:$Y>(IOSL-12) FOOT^SCRPW2,HDR^SCRPW2 Q:SDOUT S SDCT=^TMP("SCRPW",$J,SDIV,1,SDCLN,SDCL) W !!,SDCLN I '$L(SDCT) W " (No ava. found)" Q
  1. D F1 S SDTAP=SDTAP+SDAP,SDTOB=SDTOB+SDOB,SDTSL=SDTSL+SDSL,SDTNS=SDTNS+SDNS,SDTVSL=SDTVSL+SDVSL,SDTNSVS=SDTNSVS+SDNSVS,SDTOS=SDTOS+SDOS
  1. Q
  1. ;
  1. F1 S SDAP=$P(SDCT,U),SDOB=$P(SDCT,U,2),SDSL=$P(SDCT,U,3),SDNS=$P(SDCT,U,4),SDVSL=$P(SDCT,U,5),SDNSVS=$P(SDCT,U,6),SDOS=$P(SDCT,U,7)
  1. W ?32,$J(SDAP,8),?42,$J(SDVSL,8),?52,$J(SDNS,8),?62,$J(SDNSVS,8),?72,$J(SDOB,8),?82,$J(SDOS,8),?92,$J((SDSL-SDAP-SDVSL),8)
  1. S SDCAP=SDSL W ?102,$J(SDCAP,8),?112,$J($S(SDCAP=0:0,1:(SDAP+SDVSL*100)/SDCAP),8,2),"%"
  1. W ?123,$J($S(SDCAP=0:0,1:((SDAP+SDVSL-SDNS-SDNSVS)*100)/SDCAP),8,2),"%"
  1. Q
  1. ;
  1. PLINE ;Print a provider statistics line
  1. D:$Y>(IOSL-12) FOOT^SCRPW2,HDR^SCRPW2 Q:SDOUT S SDCT=^TMP("SCRPW",$J,SDIV,2,SDPRN,SDPR) W !!,SDPRN," (",SDPR,")" D F1
  1. Q
  1. ;
  1. ACT ;Count appointments, addl. variable appt. slots and no-shows
  1. Q:$P(SDCP0,U,9)="C" ;Quit if cancelled
  1. S SDPLAP=$P(SDCP0,U,2),SDPESL=0 I SDLAP,SDPLAP>SDLAP S SDPESL=SDPLAP\SDLAP-1,SDVSL=SDVSL+SDPESL
  1. Q:'SDCP0 ;SD*5.3*540
  1. S SDAP=SDAP+1,SDF1=1
  1. S SDPAS=$G(^DPT($P(SDCP0,U),"S",SDDAY,0)),SDPAS=$P(SDPAS,U,2) Q:SDPAS="" S:"NA"[SDPAS SDNS=SDNS+1,SDNSVS=SDNSVS+SDPESL
  1. Q
  1. ;
  1. SPAT(SC,SDSTRTDT,MAX,SDS) ;Set patterns into ^TMP (modified clone of OVR^SDAUT1)
  1. ;Input: SC=clinic ifn
  1. ;Input: SDSTRTDT=start date for gathering patterns
  1. ;Input: MAX=number of days beyond start date to gather patterns
  1. ;Input: SDS=array namespace subscript value (optional)
  1. ;Output: array of clinic current availability patterns in
  1. ; ^TMP(SDS,$J,clinic_ifn,"ST",date,1)
  1. ;
  1. S SDS=$G(SDS) S:'$L(SDS) SDS="SDTMP" K ^TMP(SDS,$J)
  1. N SI,SDIN,SDRE,SDSOH,ENDATE,X,X1,X2,SM,I,D,J,Y,SS,DAY
  1. S SDIN=$G(^SC(SC,"I")),SDRE=$P(SDIN,U,2),SDIN=$P(SDIN,U)
  1. S DAY="SU^MO^TU^WE^TH^FR^SA"
  1. S SI=$P($G(^SC(SC,"SL")),U,6),SI=$S(SI<3:4,1:SI)
  1. S SDSOH=$S('$D(^SC(SC,"SL")):0,$P(^SC(SC,"SL"),"^",8)']"":0,1:1)
  1. S X1=SDSTRTDT,X2=MAX,SDIN=$G(SDIN) D C^%DTC S ENDATE=X,X=SDSTRTDT
  1. EN1 S:$O(^SC(SC,"T",0))>X X=$O(^SC(SC,"T",0))
  1. S Y=$$DOW^XLFDT(X,1),I=Y+32,SM=X,D=Y D WM
  1. K J F Y=0:1:6 I $D(^SC(+SC,"T"_Y)) S J(Y)=""
  1. I '$D(J) D Q
  1. .S D=SDSTRTDT-1 F S D=$O(^SC(SC,"ST",D)) Q:'D!(D>ENDATE) D
  1. ..S X=$G(^SC(SC,"ST",D,1)) S:$L(X) ^TMP(SDS,$J,SC,"ST",D,1)=X Q
  1. .Q
  1. X1 Q:X>ENDATE S X1=X\100_28
  1. I '$$ACTIVE(X,SDIN,SDRE) S X1=X,X2=1 D C^%DTC G X1
  1. W S X=X\1
  1. I $D(^SC(+SC,"ST",X,1)) S ^TMP(SDS,$J,SC,"ST",X,1)=^SC(+SC,"ST",X,1) G W1
  1. I '$D(^SC(SC,"ST",X,1)) S Y=D#7 G L:'$D(J(Y)),H:$D(^HOLIDAY(X))&('SDSOH) S SS=$O(^SC(SC,"T"_Y,X)) G L:SS<1,L:^SC(SC,"T"_Y,SS,1)="" D
  1. .S ^TMP(SDS,$J,SC,"ST",X\1,1)=$P(DAY,U,Y+1)_" "_$E(X,6,7)_$J("",SI+SI-6)_^SC(SC,"T"_Y,SS,1) Q
  1. W1 D WM:X>SM
  1. L Q:X>ENDATE S X=X+1,D=D+1 G W:X'>X1 S X2=X-X1 D C^%DTC G X1
  1. ;
  1. H S ^TMP(SDS,$J,SC,"ST",X,1)=" "_$E(X,6,7)_" "_$P(^(X,0),U,2) G W1
  1. ;
  1. WM S SM=$S($E(X,4,5)[12:$E(X,1,3)+1_"01",1:$E(X,1,3)_$E(X,4,5)+1)_"00" Q
  1. ;
  1. ACTIVE(X,SDIN,SDRE) ;Determine if the clinic is active on a given date
  1. ;Input: X=date to be examined
  1. ;Input: SDIN=clinic inactive date
  1. ;Input: SDRE=clinic reactivate date
  1. ;Output: '1'=active, '0'=inactive
  1. Q:'SDIN 1 Q:X<SDIN 1 Q:'SDRE 0 Q:X<SDRE 0 Q 1