- SCRPW72 ;BP-CIOFO/KEITH,ESW - Clinic appointment availability extract (cont.) ; 5/23/03 12:16pm
- ;;5.3;Scheduling;**192,206,223,241,249,291,1015**;AUG 13, 1993;Build 21
- ;
- START ;Gather data for printed report
- N SDCP,SC,SCNA,SDI,SDOUT,SDPAST,SDXM,MAX,X1,X2,X,SDIOM,SDFOOT
- I $E(IOST)="C" D WAIT^DICD
- S (SDOUT,SDI)=0,SDIOM=$G(IOM,80)
- S SDPAST=SDBDT'>DT S:SDPAST SDIOM=130
- D HINI^SCRPW76,FOOT^SCRPW77(.SDFOOT)
- K ^TMP("SD",$J),^TMP("SDS",$J),^TMP("SDTMP",$J),^TMP("SDTOT",$J)
- I $G(SDREPORT(4)) K ^TMP("SDPLIST",$J)
- I $G(SDREPORT(5)) D
- .N CC F CC="SDIPLST","SDIP","SDORD" K ^TMP(CC,$J)
- D INIT^SCRPW71 S SDCOL=$S(SDPAST:0,1:(SDIOM-58\2))
- S X1=SDEDT,X2=SDBDT D ^%DTC S MAX=X+1
- I SDPAST I '$G(SDREPORT(5)) D OE(SDBDT,SDEDT,MAX,0) Q:SDOUT ;get outpt. enc. workload
- G:SDOUT EXIT^SCRPW74
- I $G(SDFMT)="D"!($G(SDFMTS)="CP") D
- .I $G(SDREPORT(5)) D CA(.SDSORT) Q
- .D @SDSORT
- I $G(SDFMT)="S"&($G(SDFMTS)'="CP") S SC=0 F S SC=$O(^SC(SC)) Q:'SC!SDOUT D
- .S SDI=SDI+1 I SDI#25=0 D STOP Q:SDOUT
- .S SC0=$G(^SC(SC,0)) Q:'$$DIV(+$P(SC0,U,15))
- .S SDX=$$CLINIC^SCRPW71(SC,SDFMT,SDBDT,SDEDT,MAX,SDPAST)
- G:SDOUT EXIT^SCRPW74
- S SDMD=$O(^TMP("SD",$J,"")),SDMD=$O(^TMP("SD",$J,SDMD)),SDMD=$L(SDMD)
- I SDPAST D NAVA^SCRPW75(SDBDT,SDEDT,SDEX) ;get next available wait times
- G:SDOUT EXIT^SCRPW74
- D ORD
- I $E(IOST)="C" D END^SCRPW50
- S SDREPORT=0 F S SDREPORT=$O(SDREPORT(SDREPORT)) Q:SDOUT!'SDREPORT D
- .I SDREPORT(SDREPORT) S SDPAGE=1 D PRT^SCRPW73(0,SDREPORT)
- G EXIT^SCRPW74
- ;
- ORD ;Build list to order clinic output
- S SDIV="" F S SDIV=$O(^TMP("SD",$J,SDIV)) Q:SDIV=""!SDOUT D
- .S SDCP=0 F S SDCP=$O(^TMP("SD",$J,SDIV,SDCP)) Q:'SDCP!SDOUT D
- ..S SC=0 F S SC=$O(^TMP("SD",$J,SDIV,SDCP,SC)) Q:'SC!SDOUT D
- ...S SCNA=$P($G(^SC(SC,0)),U) S:'$L(SCNA) SCNA="UNKNOWN"
- ...S ^TMP("SDS",$J,SDCP,SCNA,SC)=""
- Q
- ;
- OE(SDBDT,SDEDT,MAX,SDEX) ;Count clinic workload
- ;Input: SDBDT=begin date
- ;Input: SDEDT=end date
- ;Input: MAX=number of days in date range
- ;Input: SDEX='0' for user report, '1' for Austin extract
- N SDT,SDOE,SDOE0,SDCT,SDCP,SDQUIT,SDAY,DFN
- S (SDQUIT,SDCT)=0,SDT=SDBDT
- F S SDT=$O(^SCE("B",SDT)) Q:'SDT!(SDT>SDEDT)!SDOUT D
- .S SDOE=0 F S SDOE=$O(^SCE("B",SDT,SDOE)) Q:'SDOE!SDOUT D
- ..S SDCT=SDCT+1 I SDCT#1000=0 D STOP Q:SDOUT
- ..S SDOE0=$$GETOE^SDOE(SDOE) Q:$P(SDOE0,U,6) Q:$P(SDOE0,U,12)=12
- ..S DFN=$P(SDOE0,U,2) Q:'DFN
- ..Q:$E($P($G(^DPT(DFN,0)),U,9),1,5)="00000" ;exclude test patients
- ..S SC=$P(SDOE0,U,4) Q:'SC Q:'$$DIV(+$P(SDOE0,U,11))
- ..S SC0=$G(^SC(SC,0)) Q:'$L($P(SC0,U))
- ..Q:$P(SC0,U,17)="Y" Q:'$$CPAIR^SCRPW71(SC0,.SDCP)
- ..I 'SDEX,$D(SDSORT) S SDQUIT=0 D Q:SDQUIT
- ...I SDSORT="CL"!(SDSORT="CA"),'$D(SDSORT($P(SC0,U))) S SDQUIT=1 Q
- ...I SDSORT="CP",'$D(SDSORT(SDCP)) S SDQUIT=1
- ..S SDIV=$$DIV^SCRPW71(SC0) Q:'$L(SDIV)
- ..I '$D(^TMP("SD",$J,SDIV,SDCP,SC)) D ARRINI^SCRPW71(SDCP,SC,MAX,SDPAST)
- ..S $P(^TMP("SD",$J,SDIV,SDCP),U,3)=$P(^TMP("SD",$J,SDIV,SDCP),U,3)+1
- ..S $P(^TMP("SD",$J,SDIV,SDCP,SC),U,3)=$P(^TMP("SD",$J,SDIV,SDCP,SC),U,3)+1
- ..Q:SDFMT'="D" S X1=$P(SDT,"."),X2=SDBDT D ^%DTC S SDAY=X+1
- ..D ARRSET(SDCP,SC,SDAY) Q
- Q
- ;
- ARRSET(SDCP,SC,SDI) ;Set daily counts into array
- ;Input: SDCP=credit pair
- ;Input: SC=clinic ifn
- ;Input: SDI=number of days from report date
- N SDS,SDP,SDX
- S SDS=SDI-1\12,SDP=SDI#12 S:SDP=0 SDP=12
- S SDX=$P(^TMP("SD",$J,SDIV,SDCP,SC,SDS),U,SDP)
- S:'$L(SDX) SDX="0~0~0"
- S $P(SDX,"~",3)=$P(SDX,"~",3)+1
- S $P(^TMP("SD",$J,SDIV,SDCP,SC,SDS),U,SDP)=SDX
- Q
- ;
- DIV(SDIV) ;Evaluate division
- Q:'SDDIV 1 Q $D(SDDIV(SDIV))
- ;
- CA(SORT) ;Evaluate list of clinics for selected patient
- N SDCNAM,SC0,SDIV,XX,DFN,SDIV,SDCP,SDPNAME S SDI=0
- F XX=1:1:$G(SDPAT) S DFN=+^TMP("SDPAT",SDJN,XX),SDPNAME=$P(^(XX),U,2) D
- .N SDDT S SDDT=SDBDT-1+.9999999 ; DATE/TIME APPT SCHEDULED
- .F S SDDT=$O(^DPT(DFN,"S",SDDT)) Q:'SDDT!(SDDT>SDEDT) D
- ..S SDI=SDI+1 I SDI#10=0 D STOP Q:SDOUT
- ..S SC=+^DPT(DFN,"S",SDDT,0),SC0=$G(^SC(SC,0)) I '$$DIV(+$P(SC0,U,15)) Q
- ..Q:$P(SC0,U,17)="Y" ;non-count clinic
- ..S SDIV=$$DIV^SCRPW71(SC0)
- ..I '$$CPAIR^SCRPW71(SC0,.SDCP) Q
- ..I $G(SORT)="CP",'$D(SORT(SDCP)) Q ;selection by credit pairs
- ..I $G(SORT)="CL",'$D(SORT($P(SC0,U))) Q ; selection by list of clinics
- ..I $G(SDREPORT(5)) S ^TMP("SDIPLST",$J,DFN,SC)="",^TMP("SDIP",$J,$P(SDIV,U,2),SC)=SDCP_U_$P(SDIV,U),^TMP("SDORD",$J,SDPNAME,DFN)=""
- ..S SDX=$$CLINIC^SCRPW71(SC,SDFMT,SDBDT,SDEDT,MAX,SDPAST)
- Q
- CL ;Evaluate list of clinics
- N SDCNAM,SC0,SDIV S SDI=0
- S SDCNAM="" F S SDCNAM=$O(SDSORT(SDCNAM)) Q:SDCNAM=""!SDOUT D
- .S SDI=SDI+1 I SDI#10=0 D STOP Q:SDOUT
- .S SC=SDSORT(SDCNAM),SC0=$G(^SC(SC,0)) Q:'$$DIV(+$P(SC0,U,15))
- .I $G(SDREPORT(4)) S ^TMP("SDPLIST",$J,SC)=""
- .S SDX=$$CLINIC^SCRPW71(SC,SDFMT,SDBDT,SDEDT,MAX,SDPAST)
- .I $P(SDX,U,3)=-1 D
- ..S SDIV=$$DIV^SCRPW71(SC0)
- ..S:$L(SDIV) $P(^TMP("SD",$J,SDIV,SDCNAM),U,3)=$P(SDX,U,3,4) Q
- Q
- ;
- CP ;Evaluate list of credit pairs
- N SDCCP,SC,SC0 S SC=0
- F S SC=$O(^SC(SC)) Q:'SC!SDOUT D
- .S SC0=$G(^SC(SC,0)) Q:'$$DIV(+$P(SC0,U,15))
- .Q:'$$CPAIR^SCRPW71(SC0,.SDCCP)!'$D(SDSORT(SDCCP))
- .I $G(SDREPORT(4)) S ^TMP("SDPLIST",$J,SC)=""
- .S SDX=$$CLINIC^SCRPW71(SC,SDFMT,SDBDT,SDEDT,MAX,SDPAST)
- Q
- ;
- CNAME(SC) ;Massage clinic name
- N SDX
- ;Default name value
- S SDX=$P($G(^SC(SC,0)),U) Q:'$L(SDX) "UNKNOWN"
- ;Remove extract formatting characters
- S SDX=$TR(SDX,"#$^~|")
- ;Uppercase name value
- S SDX=$TR(SDX,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
- Q SDX
- ;
- SORT(SDSORT) ;Gather sort values for detailed report
- ;Input: SDSORT=sort category (pass by reference)
- ;Output: '1' if selection(s) made, '0' otherwise
- ; SDSORT(clinic name)=clinic ifn
- ; (or)
- ; SDSORT(credit pair)=credit pair
- ;
- N SDSX S SDSX="S"_SDSORT
- I SDSORT="CA" Q 1
- D @SDSX Q $D(SDSORT)>1
- ;
- SCL ;Select clinics for detail
- N DIC,SDQUIT S (SDQUIT,SDOUT)=0
- S DIC="^SC(",DIC(0)="AEMQ",DIC("A")="Select CLINIC: ",DIC("S")="I $P(^(0),U,3)=""C"""
- W ! F Q:SDOUT!SDQUIT D
- .D ^DIC I $D(DTOUT)!$D(DUOUT) S SDOUT=1 Q
- .I X="" S SDQUIT=1 Q
- .I Y>0,$L($P(Y,U,2)) S SDSORT($P(Y,U,2))=+Y
- Q
- ;
- SCP ;Get credit pairs for detail
- N DIR,SDQUIT S (SDQUIT,SDOUT)=0
- S DIR(0)="NO:101000:999000:0",DIR("A")="Select clinic DSS credit pair"
- S DIR("?",1)="Specify a six digit number that represents the primary and secondary stop"
- S DIR("?",2)="code of clinics you wish to evaluate. For clinics that do not have a"
- S DIR("?",3)="secondary stop code, enter ""000"" as the second half of the credit pair"
- S DIR("?")="(eg. ""323000"")."
- W ! F Q:SDOUT!SDQUIT D
- .D ^DIR I $D(DTOUT)!$D(DUOUT) S SDOUT=1 Q
- .I X="" S SDQUIT=1 Q
- .I '$$VCP(Y) W " Invalid credit pair!" Q
- .S SDSORT(Y)=Y
- Q
- ;
- VCP(Y) ;Validate credit pair
- ;Input: Y=credit pair
- ;Output: '1' if valid, '0' otherwise
- Q:Y'?6N 0
- Q:'$D(^DIC(40.7,"C",$E(Y,1,3))) 0
- Q:$E(Y,4,6)="000" 1
- Q:'$D(^DIC(40.7,"C",$E(Y,4,6))) 0
- Q 1
- ;
- STOP ;Check for stop task request
- S:$D(ZTQUEUED) (SDOUT,ZTSTOP)=$S($$S^%ZTLOAD:1,1:0) Q
- ;
- ADDL(SDZ) ;Format additional data
- ;Input: SDZ=addl. data from ^TMP("SDNAVB",^J,SDCP,SC)
- ;
- N SDI,SDX S SDX=""
- F SDI=1:1:7 S SDX=SDX_$S(SDI=5:"^",1:"~")_+$P(SDZ,U,SDI)
- Q SDX
- ;
- N SDBEG,SDEND,SDTIME,SDCP,SDX,SDY,SC,SCNA,SDI,SDFMT,SDOUT,SDXM,SDIOM,SDFOOT
- N SDEXDT,MAX,X1,X2,X S SDIOM=$G(IOM,80)
- F SDI=1,2,3 S SDREPORT(SDI)=1
- S (SDOUT,SDCOL)=0,SDFMT="D",SDBEG=$H,SDEXDT=DT D INIT^SCRPW71
- K ^TMP("SD",$J),^TMP("SDS",$J),^TMP("SDTMP",$J),^TMP("SDXM",$J)
- S X1=SDEDT,X2=SDBDT D ^%DTC S MAX=X+1
- D HINI^SCRPW76,FOOT^SCRPW77(.SDFOOT)
- ;
- ;Get encounter workload
- I SDPAST D OE(SDBDT,SDEDT_.9999,MAX,1) ;encounter workload
- ;
- ;Get clinic availability data
- S SC=0 F S SC=$O(^SC(SC)) Q:'SC S SC0=$G(^SC(SC,0)) D
- .S SDX=$$CLINIC^SCRPW71(SC,SDFMT,SDBDT,SDEDT,MAX,SDPAST)
- ;
- ;Get next available wait times
- S SDMD=$O(^TMP("SD",$J,"")),SDMD=$O(^TMP("SD",$J,SDMD)),SDMD=$L(SDMD)
- I SDPAST D NAVA^SCRPW75(SDBDT,SDEDT_.9999,1) ;next ava. wait times
- ;
- ;Order by clinic, send extract data to Austin
- D ORD,TXXM^SCRPW70 K ^TMP("SDXM",$J)
- ;
- ;Send summary bulletin to mail group
- S SDFMT="S",SDEND=$H,SDTIME=$$TIME(SDBEG,SDEND)
- S SDBEG=$$HTE^XLFDT(SDBEG),SDEND=$$HTE^XLFDT(SDEND)
- S SDY="*** Clinic Appointment "_$S(SDPAST:"Utilization",1:"Availability")_" Extract ***"
- S SDXM=1,SDX="",$E(SDX,(79-$L(SDY)\2))=SDY D XMTX^SCRPW73(SDX)
- D XMTX^SCRPW73(" ")
- D XMTX^SCRPW73(" For date range: "_SDPBDT_" to "_SDPEDT)
- D XMTX^SCRPW73(" Extract start time: "_SDBEG)
- D XMTX^SCRPW73(" Extract end time: "_SDEND)
- D XMTX^SCRPW73(" Extract run time: "_SDTIME)
- D XMTX^SCRPW73(" Task number: "_$G(ZTSK))
- F SDI=1:1:4 D XMTX^SCRPW73("")
- D PRT^SCRPW73(SDXM,1),EXXM^SCRPW70("G.SC CLINIC WAIT TIME")
- I SDPAST F SDI=2,3 D
- .K ^TMP("SDXM",$J) S SDXM=1
- .D PRT^SCRPW73(SDXM,SDI),EXXM^SCRPW70("G.SC CLINIC WAIT TIME")
- G EXIT^SCRPW74
- ;
- TIME(SDBEG,SDEND) ;Calculate length of run time
- ;Input: SDBEG=start time in $H format
- ;Input: SDEND=end time in $H format
- ;Output: text formatted string with # days, hours, minutes and seconds
- N X,Y
- S SDEND=$P(SDEND,",")-$P(SDBEG,",")*86400+$P(SDEND,",",2)
- S SDBEG=$P(SDBEG,",",2),X=SDEND-SDBEG,Y("D")=X\86400
- S X=X#86400,Y("H")=X\3600,X=X#3600,Y("M")=X\60,Y("S")=X#60
- S Y("D")=$S('Y("D"):"",1:Y("D")_" day"_$S(Y("D")=1:"",1:"s")_", ")
- S Y("H")=Y("H")_" hour"_$S(Y("H")=1:"",1:"s")_", "
- S Y("M")=Y("M")_" minute"_$S(Y("M")=1:"",1:"s")_", "
- S Y("S")=Y("S")_" second"_$S(Y("S")=1:"",1:"s")
- Q Y("D")_Y("H")_Y("M")_Y("S")
- SCRPW72 ;BP-CIOFO/KEITH,ESW - Clinic appointment availability extract (cont.) ; 5/23/03 12:16pm
- +1 ;;5.3;Scheduling;**192,206,223,241,249,291,1015**;AUG 13, 1993;Build 21
- +2 ;
- START ;Gather data for printed report
- +1 NEW SDCP,SC,SCNA,SDI,SDOUT,SDPAST,SDXM,MAX,X1,X2,X,SDIOM,SDFOOT
- +2 IF $EXTRACT(IOST)="C"
- DO WAIT^DICD
- +3 SET (SDOUT,SDI)=0
- SET SDIOM=$GET(IOM,80)
- +4 SET SDPAST=SDBDT'>DT
- IF SDPAST
- SET SDIOM=130
- +5 DO HINI^SCRPW76
- DO FOOT^SCRPW77(.SDFOOT)
- +6 KILL ^TMP("SD",$JOB),^TMP("SDS",$JOB),^TMP("SDTMP",$JOB),^TMP("SDTOT",$JOB)
- +7 IF $GET(SDREPORT(4))
- KILL ^TMP("SDPLIST",$JOB)
- +8 IF $GET(SDREPORT(5))
- Begin DoDot:1
- +9 NEW CC
- FOR CC="SDIPLST","SDIP","SDORD"
- KILL ^TMP(CC,$JOB)
- End DoDot:1
- +10 DO INIT^SCRPW71
- SET SDCOL=$SELECT(SDPAST:0,1:(SDIOM-58\2))
- +11 SET X1=SDEDT
- SET X2=SDBDT
- DO ^%DTC
- SET MAX=X+1
- +12 ;get outpt. enc. workload
- IF SDPAST
- IF '$GET(SDREPORT(5))
- DO OE(SDBDT,SDEDT,MAX,0)
- IF SDOUT
- QUIT
- +13 IF SDOUT
- GOTO EXIT^SCRPW74
- +14 IF $GET(SDFMT)="D"!($GET(SDFMTS)="CP")
- Begin DoDot:1
- +15 IF $GET(SDREPORT(5))
- DO CA(.SDSORT)
- QUIT
- +16 DO @SDSORT
- End DoDot:1
- +17 IF $GET(SDFMT)="S"&($GET(SDFMTS)'="CP")
- SET SC=0
- FOR
- SET SC=$ORDER(^SC(SC))
- IF 'SC!SDOUT
- QUIT
- Begin DoDot:1
- +18 SET SDI=SDI+1
- IF SDI#25=0
- DO STOP
- IF SDOUT
- QUIT
- +19 SET SC0=$GET(^SC(SC,0))
- IF '$$DIV(+$PIECE(SC0,U,15))
- QUIT
- +20 SET SDX=$$CLINIC^SCRPW71(SC,SDFMT,SDBDT,SDEDT,MAX,SDPAST)
- End DoDot:1
- +21 IF SDOUT
- GOTO EXIT^SCRPW74
- +22 SET SDMD=$ORDER(^TMP("SD",$JOB,""))
- SET SDMD=$ORDER(^TMP("SD",$JOB,SDMD))
- SET SDMD=$LENGTH(SDMD)
- +23 ;get next available wait times
- IF SDPAST
- DO NAVA^SCRPW75(SDBDT,SDEDT,SDEX)
- +24 IF SDOUT
- GOTO EXIT^SCRPW74
- +25 DO ORD
- +26 IF $EXTRACT(IOST)="C"
- DO END^SCRPW50
- +27 SET SDREPORT=0
- FOR
- SET SDREPORT=$ORDER(SDREPORT(SDREPORT))
- IF SDOUT!'SDREPORT
- QUIT
- Begin DoDot:1
- +28 IF SDREPORT(SDREPORT)
- SET SDPAGE=1
- DO PRT^SCRPW73(0,SDREPORT)
- End DoDot:1
- +29 GOTO EXIT^SCRPW74
- +30 ;
- ORD ;Build list to order clinic output
- +1 SET SDIV=""
- FOR
- SET SDIV=$ORDER(^TMP("SD",$JOB,SDIV))
- IF SDIV=""!SDOUT
- QUIT
- Begin DoDot:1
- +2 SET SDCP=0
- FOR
- SET SDCP=$ORDER(^TMP("SD",$JOB,SDIV,SDCP))
- IF 'SDCP!SDOUT
- QUIT
- Begin DoDot:2
- +3 SET SC=0
- FOR
- SET SC=$ORDER(^TMP("SD",$JOB,SDIV,SDCP,SC))
- IF 'SC!SDOUT
- QUIT
- Begin DoDot:3
- +4 SET SCNA=$PIECE($GET(^SC(SC,0)),U)
- IF '$LENGTH(SCNA)
- SET SCNA="UNKNOWN"
- +5 SET ^TMP("SDS",$JOB,SDCP,SCNA,SC)=""
- End DoDot:3
- End DoDot:2
- End DoDot:1
- +6 QUIT
- +7 ;
- OE(SDBDT,SDEDT,MAX,SDEX) ;Count clinic workload
- +1 ;Input: SDBDT=begin date
- +2 ;Input: SDEDT=end date
- +3 ;Input: MAX=number of days in date range
- +4 ;Input: SDEX='0' for user report, '1' for Austin extract
- +5 NEW SDT,SDOE,SDOE0,SDCT,SDCP,SDQUIT,SDAY,DFN
- +6 SET (SDQUIT,SDCT)=0
- SET SDT=SDBDT
- +7 FOR
- SET SDT=$ORDER(^SCE("B",SDT))
- IF 'SDT!(SDT>SDEDT)!SDOUT
- QUIT
- Begin DoDot:1
- +8 SET SDOE=0
- FOR
- SET SDOE=$ORDER(^SCE("B",SDT,SDOE))
- IF 'SDOE!SDOUT
- QUIT
- Begin DoDot:2
- +9 SET SDCT=SDCT+1
- IF SDCT#1000=0
- DO STOP
- IF SDOUT
- QUIT
- +10 SET SDOE0=$$GETOE^SDOE(SDOE)
- IF $PIECE(SDOE0,U,6)
- QUIT
- IF $PIECE(SDOE0,U,12)=12
- QUIT
- +11 SET DFN=$PIECE(SDOE0,U,2)
- IF 'DFN
- QUIT
- +12 ;exclude test patients
- IF $EXTRACT($PIECE($GET(^DPT(DFN,0)),U,9),1,5)="00000"
- QUIT
- +13 SET SC=$PIECE(SDOE0,U,4)
- IF 'SC
- QUIT
- IF '$$DIV(+$PIECE(SDOE0,U,11))
- QUIT
- +14 SET SC0=$GET(^SC(SC,0))
- IF '$LENGTH($PIECE(SC0,U))
- QUIT
- +15 IF $PIECE(SC0,U,17)="Y"
- QUIT
- IF '$$CPAIR^SCRPW71(SC0,.SDCP)
- QUIT
- +16 IF 'SDEX
- IF $DATA(SDSORT)
- SET SDQUIT=0
- Begin DoDot:3
- +17 IF SDSORT="CL"!(SDSORT="CA")
- IF '$DATA(SDSORT($PIECE(SC0,U)))
- SET SDQUIT=1
- QUIT
- +18 IF SDSORT="CP"
- IF '$DATA(SDSORT(SDCP))
- SET SDQUIT=1
- End DoDot:3
- IF SDQUIT
- QUIT
- +19 SET SDIV=$$DIV^SCRPW71(SC0)
- IF '$LENGTH(SDIV)
- QUIT
- +20 IF '$DATA(^TMP("SD",$JOB,SDIV,SDCP,SC))
- DO ARRINI^SCRPW71(SDCP,SC,MAX,SDPAST)
- +21 SET $PIECE(^TMP("SD",$JOB,SDIV,SDCP),U,3)=$PIECE(^TMP("SD",$JOB,SDIV,SDCP),U,3)+1
- +22 SET $PIECE(^TMP("SD",$JOB,SDIV,SDCP,SC),U,3)=$PIECE(^TMP("SD",$JOB,SDIV,SDCP,SC),U,3)+1
- +23 IF SDFMT'="D"
- QUIT
- SET X1=$PIECE(SDT,".")
- SET X2=SDBDT
- DO ^%DTC
- SET SDAY=X+1
- +24 DO ARRSET(SDCP,SC,SDAY)
- QUIT
- End DoDot:2
- End DoDot:1
- +25 QUIT
- +26 ;
- ARRSET(SDCP,SC,SDI) ;Set daily counts into array
- +1 ;Input: SDCP=credit pair
- +2 ;Input: SC=clinic ifn
- +3 ;Input: SDI=number of days from report date
- +4 NEW SDS,SDP,SDX
- +5 SET SDS=SDI-1\12
- SET SDP=SDI#12
- IF SDP=0
- SET SDP=12
- +6 SET SDX=$PIECE(^TMP("SD",$JOB,SDIV,SDCP,SC,SDS),U,SDP)
- +7 IF '$LENGTH(SDX)
- SET SDX="0~0~0"
- +8 SET $PIECE(SDX,"~",3)=$PIECE(SDX,"~",3)+1
- +9 SET $PIECE(^TMP("SD",$JOB,SDIV,SDCP,SC,SDS),U,SDP)=SDX
- +10 QUIT
- +11 ;
- DIV(SDIV) ;Evaluate division
- +1 IF 'SDDIV
- QUIT 1
- QUIT $DATA(SDDIV(SDIV))
- +2 ;
- CA(SORT) ;Evaluate list of clinics for selected patient
- +1 NEW SDCNAM,SC0,SDIV,XX,DFN,SDIV,SDCP,SDPNAME
- SET SDI=0
- +2 FOR XX=1:1:$GET(SDPAT)
- SET DFN=+^TMP("SDPAT",SDJN,XX)
- SET SDPNAME=$PIECE(^(XX),U,2)
- Begin DoDot:1
- +3 ; DATE/TIME APPT SCHEDULED
- NEW SDDT
- SET SDDT=SDBDT-1+.9999999
- +4 FOR
- SET SDDT=$ORDER(^DPT(DFN,"S",SDDT))
- IF 'SDDT!(SDDT>SDEDT)
- QUIT
- Begin DoDot:2
- +5 SET SDI=SDI+1
- IF SDI#10=0
- DO STOP
- IF SDOUT
- QUIT
- +6 SET SC=+^DPT(DFN,"S",SDDT,0)
- SET SC0=$GET(^SC(SC,0))
- IF '$$DIV(+$PIECE(SC0,U,15))
- QUIT
- +7 ;non-count clinic
- IF $PIECE(SC0,U,17)="Y"
- QUIT
- +8 SET SDIV=$$DIV^SCRPW71(SC0)
- +9 IF '$$CPAIR^SCRPW71(SC0,.SDCP)
- QUIT
- +10 ;selection by credit pairs
- IF $GET(SORT)="CP"
- IF '$DATA(SORT(SDCP))
- QUIT
- +11 ; selection by list of clinics
- IF $GET(SORT)="CL"
- IF '$DATA(SORT($PIECE(SC0,U)))
- QUIT
- +12 IF $GET(SDREPORT(5))
- SET ^TMP("SDIPLST",$JOB,DFN,SC)=""
- SET ^TMP("SDIP",$JOB,$PIECE(SDIV,U,2),SC)=SDCP_U_$PIECE(SDIV,U)
- SET ^TMP("SDORD",$JOB,SDPNAME,DFN)=""
- +13 SET SDX=$$CLINIC^SCRPW71(SC,SDFMT,SDBDT,SDEDT,MAX,SDPAST)
- End DoDot:2
- End DoDot:1
- +14 QUIT
- CL ;Evaluate list of clinics
- +1 NEW SDCNAM,SC0,SDIV
- SET SDI=0
- +2 SET SDCNAM=""
- FOR
- SET SDCNAM=$ORDER(SDSORT(SDCNAM))
- IF SDCNAM=""!SDOUT
- QUIT
- Begin DoDot:1
- +3 SET SDI=SDI+1
- IF SDI#10=0
- DO STOP
- IF SDOUT
- QUIT
- +4 SET SC=SDSORT(SDCNAM)
- SET SC0=$GET(^SC(SC,0))
- IF '$$DIV(+$PIECE(SC0,U,15))
- QUIT
- +5 IF $GET(SDREPORT(4))
- SET ^TMP("SDPLIST",$JOB,SC)=""
- +6 SET SDX=$$CLINIC^SCRPW71(SC,SDFMT,SDBDT,SDEDT,MAX,SDPAST)
- +7 IF $PIECE(SDX,U,3)=-1
- Begin DoDot:2
- +8 SET SDIV=$$DIV^SCRPW71(SC0)
- +9 IF $LENGTH(SDIV)
- SET $PIECE(^TMP("SD",$JOB,SDIV,SDCNAM),U,3)=$PIECE(SDX,U,3,4)
- QUIT
- End DoDot:2
- End DoDot:1
- +10 QUIT
- +11 ;
- CP ;Evaluate list of credit pairs
- +1 NEW SDCCP,SC,SC0
- SET SC=0
- +2 FOR
- SET SC=$ORDER(^SC(SC))
- IF 'SC!SDOUT
- QUIT
- Begin DoDot:1
- +3 SET SC0=$GET(^SC(SC,0))
- IF '$$DIV(+$PIECE(SC0,U,15))
- QUIT
- +4 IF '$$CPAIR^SCRPW71(SC0,.SDCCP)!'$DATA(SDSORT(SDCCP))
- QUIT
- +5 IF $GET(SDREPORT(4))
- SET ^TMP("SDPLIST",$JOB,SC)=""
- +6 SET SDX=$$CLINIC^SCRPW71(SC,SDFMT,SDBDT,SDEDT,MAX,SDPAST)
- End DoDot:1
- +7 QUIT
- +8 ;
- CNAME(SC) ;Massage clinic name
- +1 NEW SDX
- +2 ;Default name value
- +3 SET SDX=$PIECE($GET(^SC(SC,0)),U)
- IF '$LENGTH(SDX)
- QUIT "UNKNOWN"
- +4 ;Remove extract formatting characters
- +5 SET SDX=$TRANSLATE(SDX,"#$^~|")
- +6 ;Uppercase name value
- +7 SET SDX=$TRANSLATE(SDX,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
- +8 QUIT SDX
- +9 ;
- SORT(SDSORT) ;Gather sort values for detailed report
- +1 ;Input: SDSORT=sort category (pass by reference)
- +2 ;Output: '1' if selection(s) made, '0' otherwise
- +3 ; SDSORT(clinic name)=clinic ifn
- +4 ; (or)
- +5 ; SDSORT(credit pair)=credit pair
- +6 ;
- +7 NEW SDSX
- SET SDSX="S"_SDSORT
- +8 IF SDSORT="CA"
- QUIT 1
- +9 DO @SDSX
- QUIT $DATA(SDSORT)>1
- +10 ;
- SCL ;Select clinics for detail
- +1 NEW DIC,SDQUIT
- SET (SDQUIT,SDOUT)=0
- +2 SET DIC="^SC("
- SET DIC(0)="AEMQ"
- SET DIC("A")="Select CLINIC: "
- SET DIC("S")="I $P(^(0),U,3)=""C"""
- +3 WRITE !
- FOR
- IF SDOUT!SDQUIT
- QUIT
- Begin DoDot:1
- +4 DO ^DIC
- IF $DATA(DTOUT)!$DATA(DUOUT)
- SET SDOUT=1
- QUIT
- +5 IF X=""
- SET SDQUIT=1
- QUIT
- +6 IF Y>0
- IF $LENGTH($PIECE(Y,U,2))
- SET SDSORT($PIECE(Y,U,2))=+Y
- End DoDot:1
- +7 QUIT
- +8 ;
- SCP ;Get credit pairs for detail
- +1 NEW DIR,SDQUIT
- SET (SDQUIT,SDOUT)=0
- +2 SET DIR(0)="NO:101000:999000:0"
- SET DIR("A")="Select clinic DSS credit pair"
- +3 SET DIR("?",1)="Specify a six digit number that represents the primary and secondary stop"
- +4 SET DIR("?",2)="code of clinics you wish to evaluate. For clinics that do not have a"
- +5 SET DIR("?",3)="secondary stop code, enter ""000"" as the second half of the credit pair"
- +6 SET DIR("?")="(eg. ""323000"")."
- +7 WRITE !
- FOR
- IF SDOUT!SDQUIT
- QUIT
- Begin DoDot:1
- +8 DO ^DIR
- IF $DATA(DTOUT)!$DATA(DUOUT)
- SET SDOUT=1
- QUIT
- +9 IF X=""
- SET SDQUIT=1
- QUIT
- +10 IF '$$VCP(Y)
- WRITE " Invalid credit pair!"
- QUIT
- +11 SET SDSORT(Y)=Y
- End DoDot:1
- +12 QUIT
- +13 ;
- VCP(Y) ;Validate credit pair
- +1 ;Input: Y=credit pair
- +2 ;Output: '1' if valid, '0' otherwise
- +3 IF Y'?6N
- QUIT 0
- +4 IF '$DATA(^DIC(40.7,"C",$EXTRACT(Y,1,3)))
- QUIT 0
- +5 IF $EXTRACT(Y,4,6)="000"
- QUIT 1
- +6 IF '$DATA(^DIC(40.7,"C",$EXTRACT(Y,4,6)))
- QUIT 0
- +7 QUIT 1
- +8 ;
- STOP ;Check for stop task request
- +1 IF $DATA(ZTQUEUED)
- SET (SDOUT,ZTSTOP)=$SELECT($$S^%ZTLOAD:1,1:0)
- QUIT
- +2 ;
- ADDL(SDZ) ;Format additional data
- +1 ;Input: SDZ=addl. data from ^TMP("SDNAVB",^J,SDCP,SC)
- +2 ;
- +3 NEW SDI,SDX
- SET SDX=""
- +4 FOR SDI=1:1:7
- SET SDX=SDX_$SELECT(SDI=5:"^",1:"~")_+$PIECE(SDZ,U,SDI)
- +5 QUIT SDX
- +6 ;
- +1 NEW SDBEG,SDEND,SDTIME,SDCP,SDX,SDY,SC,SCNA,SDI,SDFMT,SDOUT,SDXM,SDIOM,SDFOOT
- +2 NEW SDEXDT,MAX,X1,X2,X
- SET SDIOM=$GET(IOM,80)
- +3 FOR SDI=1,2,3
- SET SDREPORT(SDI)=1
- +4 SET (SDOUT,SDCOL)=0
- SET SDFMT="D"
- SET SDBEG=$HOROLOG
- SET SDEXDT=DT
- DO INIT^SCRPW71
- +5 KILL ^TMP("SD",$JOB),^TMP("SDS",$JOB),^TMP("SDTMP",$JOB),^TMP("SDXM",$JOB)
- +6 SET X1=SDEDT
- SET X2=SDBDT
- DO ^%DTC
- SET MAX=X+1
- +7 DO HINI^SCRPW76
- DO FOOT^SCRPW77(.SDFOOT)
- +8 ;
- +9 ;Get encounter workload
- +10 ;encounter workload
- IF SDPAST
- DO OE(SDBDT,SDEDT_.9999,MAX,1)
- +11 ;
- +12 ;Get clinic availability data
- +13 SET SC=0
- FOR
- SET SC=$ORDER(^SC(SC))
- IF 'SC
- QUIT
- SET SC0=$GET(^SC(SC,0))
- Begin DoDot:1
- +14 SET SDX=$$CLINIC^SCRPW71(SC,SDFMT,SDBDT,SDEDT,MAX,SDPAST)
- End DoDot:1
- +15 ;
- +16 ;Get next available wait times
- +17 SET SDMD=$ORDER(^TMP("SD",$JOB,""))
- SET SDMD=$ORDER(^TMP("SD",$JOB,SDMD))
- SET SDMD=$LENGTH(SDMD)
- +18 ;next ava. wait times
- IF SDPAST
- DO NAVA^SCRPW75(SDBDT,SDEDT_.9999,1)
- +19 ;
- +20 ;Order by clinic, send extract data to Austin
- +21 DO ORD
- DO TXXM^SCRPW70
- KILL ^TMP("SDXM",$JOB)
- +22 ;
- +23 ;Send summary bulletin to mail group
- +24 SET SDFMT="S"
- SET SDEND=$HOROLOG
- SET SDTIME=$$TIME(SDBEG,SDEND)
- +25 SET SDBEG=$$HTE^XLFDT(SDBEG)
- SET SDEND=$$HTE^XLFDT(SDEND)
- +26 SET SDY="*** Clinic Appointment "_$SELECT(SDPAST:"Utilization",1:"Availability")_" Extract ***"
- +27 SET SDXM=1
- SET SDX=""
- SET $EXTRACT(SDX,(79-$LENGTH(SDY)\2))=SDY
- DO XMTX^SCRPW73(SDX)
- +28 DO XMTX^SCRPW73(" ")
- +29 DO XMTX^SCRPW73(" For date range: "_SDPBDT_" to "_SDPEDT)
- +30 DO XMTX^SCRPW73(" Extract start time: "_SDBEG)
- +31 DO XMTX^SCRPW73(" Extract end time: "_SDEND)
- +32 DO XMTX^SCRPW73(" Extract run time: "_SDTIME)
- +33 DO XMTX^SCRPW73(" Task number: "_$GET(ZTSK))
- +34 FOR SDI=1:1:4
- DO XMTX^SCRPW73("")
- +35 DO PRT^SCRPW73(SDXM,1)
- DO EXXM^SCRPW70("G.SC CLINIC WAIT TIME")
- +36 IF SDPAST
- FOR SDI=2,3
- Begin DoDot:1
- +37 KILL ^TMP("SDXM",$JOB)
- SET SDXM=1
- +38 DO PRT^SCRPW73(SDXM,SDI)
- DO EXXM^SCRPW70("G.SC CLINIC WAIT TIME")
- End DoDot:1
- +39 GOTO EXIT^SCRPW74
- +40 ;
- TIME(SDBEG,SDEND) ;Calculate length of run time
- +1 ;Input: SDBEG=start time in $H format
- +2 ;Input: SDEND=end time in $H format
- +3 ;Output: text formatted string with # days, hours, minutes and seconds
- +4 NEW X,Y
- +5 SET SDEND=$PIECE(SDEND,",")-$PIECE(SDBEG,",")*86400+$PIECE(SDEND,",",2)
- +6 SET SDBEG=$PIECE(SDBEG,",",2)
- SET X=SDEND-SDBEG
- SET Y("D")=X\86400
- +7 SET X=X#86400
- SET Y("H")=X\3600
- SET X=X#3600
- SET Y("M")=X\60
- SET Y("S")=X#60
- +8 SET Y("D")=$SELECT('Y("D"):"",1:Y("D")_" day"_$SELECT(Y("D")=1:"",1:"s")_", ")
- +9 SET Y("H")=Y("H")_" hour"_$SELECT(Y("H")=1:"",1:"s")_", "
- +10 SET Y("M")=Y("M")_" minute"_$SELECT(Y("M")=1:"",1:"s")_", "
- +11 SET Y("S")=Y("S")_" second"_$SELECT(Y("S")=1:"",1:"s")
- +12 QUIT Y("D")_Y("H")_Y("M")_Y("S")