| 1 | SCRPW72 ;BP-CIOFO/KEITH,ESW - Clinic appointment availability extract (cont.) ; 5/23/03 12:16pm | 
|---|
| 2 | ;;5.3;Scheduling;**192,206,223,241,249,291**;AUG 13, 1993 | 
|---|
| 3 | ; | 
|---|
| 4 | START ;Gather data for printed report | 
|---|
| 5 | N SDCP,SC,SCNA,SDI,SDOUT,SDPAST,SDXM,MAX,X1,X2,X,SDIOM,SDFOOT | 
|---|
| 6 | I $E(IOST)="C" D WAIT^DICD | 
|---|
| 7 | S (SDOUT,SDI)=0,SDIOM=$G(IOM,80) | 
|---|
| 8 | S SDPAST=SDBDT'>DT S:SDPAST SDIOM=130 | 
|---|
| 9 | D HINI^SCRPW76,FOOT^SCRPW77(.SDFOOT) | 
|---|
| 10 | K ^TMP("SD",$J),^TMP("SDS",$J),^TMP("SDTMP",$J),^TMP("SDTOT",$J) | 
|---|
| 11 | I $G(SDREPORT(4)) K ^TMP("SDPLIST",$J) | 
|---|
| 12 | I $G(SDREPORT(5)) D | 
|---|
| 13 | .N CC F CC="SDIPLST","SDIP","SDORD" K ^TMP(CC,$J) | 
|---|
| 14 | D INIT^SCRPW71 S SDCOL=$S(SDPAST:0,1:(SDIOM-58\2)) | 
|---|
| 15 | S X1=SDEDT,X2=SDBDT D ^%DTC S MAX=X+1 | 
|---|
| 16 | I SDPAST I '$G(SDREPORT(5)) D OE(SDBDT,SDEDT,MAX,0) Q:SDOUT  ;get outpt. enc. workload | 
|---|
| 17 | G:SDOUT EXIT^SCRPW74 | 
|---|
| 18 | I $G(SDFMT)="D"!($G(SDFMTS)="CP") D | 
|---|
| 19 | .I $G(SDREPORT(5)) D CA(.SDSORT) Q | 
|---|
| 20 | .D @SDSORT | 
|---|
| 21 | I $G(SDFMT)="S"&($G(SDFMTS)'="CP") S SC=0 F  S SC=$O(^SC(SC)) Q:'SC!SDOUT  D | 
|---|
| 22 | .S SDI=SDI+1 I SDI#25=0 D STOP Q:SDOUT | 
|---|
| 23 | .S SC0=$G(^SC(SC,0)) Q:'$$DIV(+$P(SC0,U,15)) | 
|---|
| 24 | .S SDX=$$CLINIC^SCRPW71(SC,SDFMT,SDBDT,SDEDT,MAX,SDPAST) | 
|---|
| 25 | G:SDOUT EXIT^SCRPW74 | 
|---|
| 26 | S SDMD=$O(^TMP("SD",$J,"")),SDMD=$O(^TMP("SD",$J,SDMD)),SDMD=$L(SDMD) | 
|---|
| 27 | I SDPAST D NAVA^SCRPW75(SDBDT,SDEDT,SDEX)  ;get next available wait times | 
|---|
| 28 | G:SDOUT EXIT^SCRPW74 | 
|---|
| 29 | D ORD | 
|---|
| 30 | I $E(IOST)="C" D END^SCRPW50 | 
|---|
| 31 | S SDREPORT=0 F  S SDREPORT=$O(SDREPORT(SDREPORT)) Q:SDOUT!'SDREPORT  D | 
|---|
| 32 | .I SDREPORT(SDREPORT) S SDPAGE=1 D PRT^SCRPW73(0,SDREPORT) | 
|---|
| 33 | G EXIT^SCRPW74 | 
|---|
| 34 | ; | 
|---|
| 35 | ORD ;Build list to order clinic output | 
|---|
| 36 | S SDIV="" F  S SDIV=$O(^TMP("SD",$J,SDIV)) Q:SDIV=""!SDOUT  D | 
|---|
| 37 | .S SDCP=0 F  S SDCP=$O(^TMP("SD",$J,SDIV,SDCP)) Q:'SDCP!SDOUT  D | 
|---|
| 38 | ..S SC=0 F  S SC=$O(^TMP("SD",$J,SDIV,SDCP,SC)) Q:'SC!SDOUT  D | 
|---|
| 39 | ...S SCNA=$P($G(^SC(SC,0)),U) S:'$L(SCNA) SCNA="UNKNOWN" | 
|---|
| 40 | ...S ^TMP("SDS",$J,SDCP,SCNA,SC)="" | 
|---|
| 41 | Q | 
|---|
| 42 | ; | 
|---|
| 43 | OE(SDBDT,SDEDT,MAX,SDEX) ;Count clinic workload | 
|---|
| 44 | ;Input: SDBDT=begin date | 
|---|
| 45 | ;Input: SDEDT=end date | 
|---|
| 46 | ;Input: MAX=number of days in date range | 
|---|
| 47 | ;Input: SDEX='0' for user report, '1' for Austin extract | 
|---|
| 48 | N SDT,SDOE,SDOE0,SDCT,SDCP,SDQUIT,SDAY,DFN | 
|---|
| 49 | S (SDQUIT,SDCT)=0,SDT=SDBDT | 
|---|
| 50 | F  S SDT=$O(^SCE("B",SDT)) Q:'SDT!(SDT>SDEDT)!SDOUT  D | 
|---|
| 51 | .S SDOE=0 F  S SDOE=$O(^SCE("B",SDT,SDOE)) Q:'SDOE!SDOUT  D | 
|---|
| 52 | ..S SDCT=SDCT+1 I SDCT#1000=0 D STOP Q:SDOUT | 
|---|
| 53 | ..S SDOE0=$$GETOE^SDOE(SDOE) Q:$P(SDOE0,U,6)  Q:$P(SDOE0,U,12)=12 | 
|---|
| 54 | ..S DFN=$P(SDOE0,U,2) Q:'DFN | 
|---|
| 55 | ..Q:$E($P($G(^DPT(DFN,0)),U,9),1,5)="00000"  ;exclude test patients | 
|---|
| 56 | ..S SC=$P(SDOE0,U,4) Q:'SC  Q:'$$DIV(+$P(SDOE0,U,11)) | 
|---|
| 57 | ..S SC0=$G(^SC(SC,0)) Q:'$L($P(SC0,U)) | 
|---|
| 58 | ..Q:$P(SC0,U,17)="Y"  Q:'$$CPAIR^SCRPW71(SC0,.SDCP) | 
|---|
| 59 | ..I 'SDEX,$D(SDSORT) S SDQUIT=0 D  Q:SDQUIT | 
|---|
| 60 | ...I SDSORT="CL"!(SDSORT="CA"),'$D(SDSORT($P(SC0,U))) S SDQUIT=1 Q | 
|---|
| 61 | ...I SDSORT="CP",'$D(SDSORT(SDCP)) S SDQUIT=1 | 
|---|
| 62 | ..S SDIV=$$DIV^SCRPW71(SC0) Q:'$L(SDIV) | 
|---|
| 63 | ..I '$D(^TMP("SD",$J,SDIV,SDCP,SC)) D ARRINI^SCRPW71(SDCP,SC,MAX,SDPAST) | 
|---|
| 64 | ..S $P(^TMP("SD",$J,SDIV,SDCP),U,3)=$P(^TMP("SD",$J,SDIV,SDCP),U,3)+1 | 
|---|
| 65 | ..S $P(^TMP("SD",$J,SDIV,SDCP,SC),U,3)=$P(^TMP("SD",$J,SDIV,SDCP,SC),U,3)+1 | 
|---|
| 66 | ..Q:SDFMT'="D"  S X1=$P(SDT,"."),X2=SDBDT D ^%DTC S SDAY=X+1 | 
|---|
| 67 | ..D ARRSET(SDCP,SC,SDAY) Q | 
|---|
| 68 | Q | 
|---|
| 69 | ; | 
|---|
| 70 | ARRSET(SDCP,SC,SDI) ;Set daily counts into array | 
|---|
| 71 | ;Input: SDCP=credit pair | 
|---|
| 72 | ;Input: SC=clinic ifn | 
|---|
| 73 | ;Input: SDI=number of days from report date | 
|---|
| 74 | N SDS,SDP,SDX | 
|---|
| 75 | S SDS=SDI-1\12,SDP=SDI#12 S:SDP=0 SDP=12 | 
|---|
| 76 | S SDX=$P(^TMP("SD",$J,SDIV,SDCP,SC,SDS),U,SDP) | 
|---|
| 77 | S:'$L(SDX) SDX="0~0~0" | 
|---|
| 78 | S $P(SDX,"~",3)=$P(SDX,"~",3)+1 | 
|---|
| 79 | S $P(^TMP("SD",$J,SDIV,SDCP,SC,SDS),U,SDP)=SDX | 
|---|
| 80 | Q | 
|---|
| 81 | ; | 
|---|
| 82 | DIV(SDIV) ;Evaluate division | 
|---|
| 83 | Q:'SDDIV 1  Q $D(SDDIV(SDIV)) | 
|---|
| 84 | ; | 
|---|
| 85 | CA(SORT) ;Evaluate list of clinics for selected patient | 
|---|
| 86 | N SDCNAM,SC0,SDIV,XX,DFN,SDIV,SDCP,SDPNAME S SDI=0 | 
|---|
| 87 | F XX=1:1:$G(SDPAT) S DFN=+^TMP("SDPAT",SDJN,XX),SDPNAME=$P(^(XX),U,2)  D | 
|---|
| 88 | .N SDDT S SDDT=SDBDT-1+.9999999 ; DATE/TIME APPT SCHEDULED | 
|---|
| 89 | .F  S SDDT=$O(^DPT(DFN,"S",SDDT)) Q:'SDDT!(SDDT>SDEDT)  D | 
|---|
| 90 | ..S SDI=SDI+1 I SDI#10=0 D STOP Q:SDOUT | 
|---|
| 91 | ..S SC=+^DPT(DFN,"S",SDDT,0),SC0=$G(^SC(SC,0)) I '$$DIV(+$P(SC0,U,15)) Q | 
|---|
| 92 | ..Q:$P(SC0,U,17)="Y"  ;non-count clinic | 
|---|
| 93 | ..S SDIV=$$DIV^SCRPW71(SC0) | 
|---|
| 94 | ..I '$$CPAIR^SCRPW71(SC0,.SDCP) Q | 
|---|
| 95 | ..I $G(SORT)="CP",'$D(SORT(SDCP)) Q  ;selection by credit pairs | 
|---|
| 96 | ..I $G(SORT)="CL",'$D(SORT($P(SC0,U))) Q  ; selection by list of clinics | 
|---|
| 97 | ..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)="" | 
|---|
| 98 | ..S SDX=$$CLINIC^SCRPW71(SC,SDFMT,SDBDT,SDEDT,MAX,SDPAST) | 
|---|
| 99 | Q | 
|---|
| 100 | CL ;Evaluate list of clinics | 
|---|
| 101 | N SDCNAM,SC0,SDIV S SDI=0 | 
|---|
| 102 | S SDCNAM="" F  S SDCNAM=$O(SDSORT(SDCNAM)) Q:SDCNAM=""!SDOUT  D | 
|---|
| 103 | .S SDI=SDI+1 I SDI#10=0 D STOP Q:SDOUT | 
|---|
| 104 | .S SC=SDSORT(SDCNAM),SC0=$G(^SC(SC,0)) Q:'$$DIV(+$P(SC0,U,15)) | 
|---|
| 105 | .I $G(SDREPORT(4)) S ^TMP("SDPLIST",$J,SC)="" | 
|---|
| 106 | .S SDX=$$CLINIC^SCRPW71(SC,SDFMT,SDBDT,SDEDT,MAX,SDPAST) | 
|---|
| 107 | .I $P(SDX,U,3)=-1 D | 
|---|
| 108 | ..S SDIV=$$DIV^SCRPW71(SC0) | 
|---|
| 109 | ..S:$L(SDIV) $P(^TMP("SD",$J,SDIV,SDCNAM),U,3)=$P(SDX,U,3,4) Q | 
|---|
| 110 | Q | 
|---|
| 111 | ; | 
|---|
| 112 | CP ;Evaluate list of credit pairs | 
|---|
| 113 | N SDCCP,SC,SC0 S SC=0 | 
|---|
| 114 | F  S SC=$O(^SC(SC)) Q:'SC!SDOUT  D | 
|---|
| 115 | .S SC0=$G(^SC(SC,0)) Q:'$$DIV(+$P(SC0,U,15)) | 
|---|
| 116 | .Q:'$$CPAIR^SCRPW71(SC0,.SDCCP)!'$D(SDSORT(SDCCP)) | 
|---|
| 117 | .I $G(SDREPORT(4)) S ^TMP("SDPLIST",$J,SC)="" | 
|---|
| 118 | .S SDX=$$CLINIC^SCRPW71(SC,SDFMT,SDBDT,SDEDT,MAX,SDPAST) | 
|---|
| 119 | Q | 
|---|
| 120 | ; | 
|---|
| 121 | CNAME(SC) ;Massage clinic name | 
|---|
| 122 | N SDX | 
|---|
| 123 | ;Default name value | 
|---|
| 124 | S SDX=$P($G(^SC(SC,0)),U) Q:'$L(SDX) "UNKNOWN" | 
|---|
| 125 | ;Remove extract formatting characters | 
|---|
| 126 | S SDX=$TR(SDX,"#$^~|") | 
|---|
| 127 | ;Uppercase name value | 
|---|
| 128 | S SDX=$TR(SDX,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ") | 
|---|
| 129 | Q SDX | 
|---|
| 130 | ; | 
|---|
| 131 | SORT(SDSORT) ;Gather sort values for detailed report | 
|---|
| 132 | ;Input: SDSORT=sort category (pass by reference) | 
|---|
| 133 | ;Output: '1' if selection(s) made, '0' otherwise | 
|---|
| 134 | ;        SDSORT(clinic name)=clinic ifn | 
|---|
| 135 | ;                    (or) | 
|---|
| 136 | ;        SDSORT(credit pair)=credit pair | 
|---|
| 137 | ; | 
|---|
| 138 | N SDSX S SDSX="S"_SDSORT | 
|---|
| 139 | I SDSORT="CA" Q 1 | 
|---|
| 140 | D @SDSX Q $D(SDSORT)>1 | 
|---|
| 141 | ; | 
|---|
| 142 | SCL ;Select clinics for detail | 
|---|
| 143 | N DIC,SDQUIT S (SDQUIT,SDOUT)=0 | 
|---|
| 144 | S DIC="^SC(",DIC(0)="AEMQ",DIC("A")="Select CLINIC: ",DIC("S")="I $P(^(0),U,3)=""C""" | 
|---|
| 145 | W ! F  Q:SDOUT!SDQUIT  D | 
|---|
| 146 | .D ^DIC I $D(DTOUT)!$D(DUOUT) S SDOUT=1 Q | 
|---|
| 147 | .I X="" S SDQUIT=1 Q | 
|---|
| 148 | .I Y>0,$L($P(Y,U,2)) S SDSORT($P(Y,U,2))=+Y | 
|---|
| 149 | Q | 
|---|
| 150 | ; | 
|---|
| 151 | SCP ;Get credit pairs for detail | 
|---|
| 152 | N DIR,SDQUIT S (SDQUIT,SDOUT)=0 | 
|---|
| 153 | S DIR(0)="NO:101000:999000:0",DIR("A")="Select clinic DSS credit pair" | 
|---|
| 154 | S DIR("?",1)="Specify a six digit number that represents the primary and secondary stop" | 
|---|
| 155 | S DIR("?",2)="code of clinics you wish to evaluate.  For clinics that do not have a" | 
|---|
| 156 | S DIR("?",3)="secondary stop code, enter ""000"" as the second half of the credit pair" | 
|---|
| 157 | S DIR("?")="(eg. ""323000"")." | 
|---|
| 158 | W ! F  Q:SDOUT!SDQUIT  D | 
|---|
| 159 | .D ^DIR I $D(DTOUT)!$D(DUOUT) S SDOUT=1 Q | 
|---|
| 160 | .I X="" S SDQUIT=1 Q | 
|---|
| 161 | .I '$$VCP(Y) W "  Invalid credit pair!" Q | 
|---|
| 162 | .S SDSORT(Y)=Y | 
|---|
| 163 | Q | 
|---|
| 164 | ; | 
|---|
| 165 | VCP(Y) ;Validate credit pair | 
|---|
| 166 | ;Input: Y=credit pair | 
|---|
| 167 | ;Output: '1' if valid, '0' otherwise | 
|---|
| 168 | Q:Y'?6N 0 | 
|---|
| 169 | Q:'$D(^DIC(40.7,"C",$E(Y,1,3))) 0 | 
|---|
| 170 | Q:$E(Y,4,6)="000" 1 | 
|---|
| 171 | Q:'$D(^DIC(40.7,"C",$E(Y,4,6))) 0 | 
|---|
| 172 | Q 1 | 
|---|
| 173 | ; | 
|---|
| 174 | STOP ;Check for stop task request | 
|---|
| 175 | S:$D(ZTQUEUED) (SDOUT,ZTSTOP)=$S($$S^%ZTLOAD:1,1:0) Q | 
|---|
| 176 | ; | 
|---|
| 177 | ADDL(SDZ) ;Format additional data | 
|---|
| 178 | ;Input: SDZ=addl. data from ^TMP("SDNAVB",^J,SDCP,SC) | 
|---|
| 179 | ; | 
|---|
| 180 | N SDI,SDX S SDX="" | 
|---|
| 181 | F SDI=1:1:7 S SDX=SDX_$S(SDI=5:"^",1:"~")_+$P(SDZ,U,SDI) | 
|---|
| 182 | Q SDX | 
|---|
| 183 | ; | 
|---|
| 184 | EXTRACT ;Gather data for extract | 
|---|
| 185 | N SDBEG,SDEND,SDTIME,SDCP,SDX,SDY,SC,SCNA,SDI,SDFMT,SDOUT,SDXM,SDIOM,SDFOOT | 
|---|
| 186 | N SDEXDT,MAX,X1,X2,X S SDIOM=$G(IOM,80) | 
|---|
| 187 | F SDI=1,2,3 S SDREPORT(SDI)=1 | 
|---|
| 188 | S (SDOUT,SDCOL)=0,SDFMT="D",SDBEG=$H,SDEXDT=DT D INIT^SCRPW71 | 
|---|
| 189 | K ^TMP("SD",$J),^TMP("SDS",$J),^TMP("SDTMP",$J),^TMP("SDXM",$J) | 
|---|
| 190 | S X1=SDEDT,X2=SDBDT D ^%DTC S MAX=X+1 | 
|---|
| 191 | D HINI^SCRPW76,FOOT^SCRPW77(.SDFOOT) | 
|---|
| 192 | ; | 
|---|
| 193 | ;Get encounter workload | 
|---|
| 194 | I SDPAST D OE(SDBDT,SDEDT_.9999,MAX,1)  ;encounter workload | 
|---|
| 195 | ; | 
|---|
| 196 | ;Get clinic availability data | 
|---|
| 197 | S SC=0 F  S SC=$O(^SC(SC)) Q:'SC  S SC0=$G(^SC(SC,0)) D | 
|---|
| 198 | .S SDX=$$CLINIC^SCRPW71(SC,SDFMT,SDBDT,SDEDT,MAX,SDPAST) | 
|---|
| 199 | ; | 
|---|
| 200 | ;Get next available wait times | 
|---|
| 201 | S SDMD=$O(^TMP("SD",$J,"")),SDMD=$O(^TMP("SD",$J,SDMD)),SDMD=$L(SDMD) | 
|---|
| 202 | I SDPAST D NAVA^SCRPW75(SDBDT,SDEDT_.9999,1)  ;next ava. wait times | 
|---|
| 203 | ; | 
|---|
| 204 | ;Order by clinic, send extract data to Austin | 
|---|
| 205 | D ORD,TXXM^SCRPW70 K ^TMP("SDXM",$J) | 
|---|
| 206 | ; | 
|---|
| 207 | ;Send summary bulletin to mail group | 
|---|
| 208 | S SDFMT="S",SDEND=$H,SDTIME=$$TIME(SDBEG,SDEND) | 
|---|
| 209 | S SDBEG=$$HTE^XLFDT(SDBEG),SDEND=$$HTE^XLFDT(SDEND) | 
|---|
| 210 | S SDY="*** Clinic Appointment "_$S(SDPAST:"Utilization",1:"Availability")_" Extract ***" | 
|---|
| 211 | S SDXM=1,SDX="",$E(SDX,(79-$L(SDY)\2))=SDY D XMTX^SCRPW73(SDX) | 
|---|
| 212 | D XMTX^SCRPW73(" ") | 
|---|
| 213 | D XMTX^SCRPW73("                   For date range: "_SDPBDT_" to "_SDPEDT) | 
|---|
| 214 | D XMTX^SCRPW73("               Extract start time: "_SDBEG) | 
|---|
| 215 | D XMTX^SCRPW73("                 Extract end time: "_SDEND) | 
|---|
| 216 | D XMTX^SCRPW73("                 Extract run time: "_SDTIME) | 
|---|
| 217 | D XMTX^SCRPW73("                      Task number: "_$G(ZTSK)) | 
|---|
| 218 | F SDI=1:1:4 D XMTX^SCRPW73("") | 
|---|
| 219 | D PRT^SCRPW73(SDXM,1),EXXM^SCRPW70("G.SC CLINIC WAIT TIME") | 
|---|
| 220 | I SDPAST F SDI=2,3 D | 
|---|
| 221 | .K ^TMP("SDXM",$J) S SDXM=1 | 
|---|
| 222 | .D PRT^SCRPW73(SDXM,SDI),EXXM^SCRPW70("G.SC CLINIC WAIT TIME") | 
|---|
| 223 | G EXIT^SCRPW74 | 
|---|
| 224 | ; | 
|---|
| 225 | TIME(SDBEG,SDEND) ;Calculate length of run time | 
|---|
| 226 | ;Input: SDBEG=start time in $H format | 
|---|
| 227 | ;Input: SDEND=end time in $H format | 
|---|
| 228 | ;Output: text formatted string with # days, hours, minutes and seconds | 
|---|
| 229 | N X,Y | 
|---|
| 230 | S SDEND=$P(SDEND,",")-$P(SDBEG,",")*86400+$P(SDEND,",",2) | 
|---|
| 231 | S SDBEG=$P(SDBEG,",",2),X=SDEND-SDBEG,Y("D")=X\86400 | 
|---|
| 232 | S X=X#86400,Y("H")=X\3600,X=X#3600,Y("M")=X\60,Y("S")=X#60 | 
|---|
| 233 | S Y("D")=$S('Y("D"):"",1:Y("D")_" day"_$S(Y("D")=1:"",1:"s")_", ") | 
|---|
| 234 | S Y("H")=Y("H")_" hour"_$S(Y("H")=1:"",1:"s")_", " | 
|---|
| 235 | S Y("M")=Y("M")_" minute"_$S(Y("M")=1:"",1:"s")_", " | 
|---|
| 236 | S Y("S")=Y("S")_" second"_$S(Y("S")=1:"",1:"s") | 
|---|
| 237 | Q Y("D")_Y("H")_Y("M")_Y("S") | 
|---|