| [613] | 1 | SCRPW75 ;BP-CIOFO/KEITH,ESW - Clinic Appointment Availability Extract (cont.) ; 5/15/03 3:15pm
 | 
|---|
 | 2 |  ;;5.3;Scheduling;**206,223,241,249,291**;AUG 13, 1993
 | 
|---|
 | 3 |  ;
 | 
|---|
 | 4 | NAVA(SDBDT,SDEDT,SDEX) ;Gather next available appointment wait time information
 | 
|---|
 | 5 |  ;Input: SDBDT=beginning date
 | 
|---|
 | 6 |  ;Input: SDEDT=ending date
 | 
|---|
 | 7 |  ;Input: SDEX='0' for user report, '1' for Austin extract
 | 
|---|
 | 8 |  ;Output: ^TMP("SDNAVA",$J) array in the format:
 | 
|---|
 | 9 |  ;        ^TMP("SDNAVA",$J,division)='x'
 | 
|---|
 | 10 |  ;        ^TMP("SDNAVA",$J,division,credit_pair)='x'
 | 
|---|
 | 11 |  ;        ^TMP("SDNAVA",$J,division,credit_pair,clinic_ifn)='x'
 | 
|---|
 | 12 |  ;        ^TMP("SDNAVA",$J,division;credit_pair,clinic_ifn,date_scheduled)='x'
 | 
|---|
 | 13 |  ;        where 'x' consists of:
 | 
|---|
 | 14 |  ;        piece 1 = flag '0' appts.
 | 
|---|
 | 15 |  ;              2 = ave. flag '0' wait time
 | 
|---|
 | 16 |  ;              3 = flag '1' appts.
 | 
|---|
 | 17 |  ;              4 = ave. flag '1' wait time
 | 
|---|
 | 18 |  ;              5 = flag '2' appts.
 | 
|---|
 | 19 |  ;              6 = ave. flag '2' wait time
 | 
|---|
 | 20 |  ;              7 = flag '3' appts.
 | 
|---|
 | 21 |  ;              8 = ave. flag '3' wait time
 | 
|---|
 | 22 |  ;              9 = follow-up next ava. appts.
 | 
|---|
 | 23 |  ;             10 = follow-up next ava. wait time
 | 
|---|
 | 24 |  ;             11 = follow-up non-next ava. appts. <2 days
 | 
|---|
 | 25 |  ;             12 = follow-up non-next ava. appts. <2 days wait time*
 | 
|---|
 | 26 |  ;             13 = follow-up non-next ava. appts. 2-7 days
 | 
|---|
 | 27 |  ;             14 = follow-up non-next ava. appts. 2-7 days wait time*
 | 
|---|
 | 28 |  ;             15 = follow-up non-next ava. appts. 8-30 days
 | 
|---|
 | 29 |  ;             16 = follow-up non-next ava. appts. 8-30 days wait time*
 | 
|---|
 | 30 |  ;             17 = follow-up non-next ava. appts. 31-60 days
 | 
|---|
 | 31 |  ;             18 = follow-up non-next ava. appts. 31-60 days wait time*
 | 
|---|
 | 32 |  ;             19 = follow-up non-next ava. appts. >60 days
 | 
|---|
 | 33 |  ;             20 = follow-up non-next ava. appts. >60 days wait time*
 | 
|---|
 | 34 |  ;             21 = non-follow-up next ava. appts.
 | 
|---|
 | 35 |  ;             22 = non-follow-up next ava. wait time
 | 
|---|
 | 36 |  ;             23 = non-follow-up non-next ava. appts. <2 days
 | 
|---|
 | 37 |  ;             24 = non-follow-up non-next ava. appts. <2 days wait time*
 | 
|---|
 | 38 |  ;             25 = non-follow-up non-next ava. appts. <2 days wait time**
 | 
|---|
 | 39 |  ;             26 = non-follow-up non-next ava. appts. 2-7 days
 | 
|---|
 | 40 |  ;             27 = non-follow-up non-next ava. appts. 2-7 days wait time*
 | 
|---|
 | 41 |  ;             28 = non-follow-up non-next ava. appts. 2-7 days wait time**
 | 
|---|
 | 42 |  ;             29 = non-follow-up non-next ava. appts. 8-30 days
 | 
|---|
 | 43 |  ;             30 = non-follow-up non-next ava. appts. 8-30 days wait time*
 | 
|---|
 | 44 |  ;             31 = non-follow-up non-next ava. appts. 8-30 days wait time**
 | 
|---|
 | 45 |  ;             32 = non-follow-up non-next ava. appts. 31-60 days
 | 
|---|
 | 46 |  ;             33 = non-follow-up non-next ava. appts. 31-60 days wait time*
 | 
|---|
 | 47 |  ;             34 = non-follow-up non-next ava. appts. 31-60 days wait time**
 | 
|---|
 | 48 |  ;             35 = non-follow-up non-next ava. appts. >60 days
 | 
|---|
 | 49 |  ;             36 = non-follow-up non-next ava. appts. >60 days wait time*
 | 
|---|
 | 50 |  ;             37 = non-follow-up non-next ava. appts. >60 days wait time**
 | 
|---|
 | 51 |  ;             38 = percent of non-next ava. appts. within 30 days
 | 
|---|
 | 52 |  ;             39 = percent of next ava. appts. within 30 days
 | 
|---|
 | 53 |  ;
 | 
|---|
 | 54 |  ;      ^TMP("SDNAVB",$J) array in the format:
 | 
|---|
 | 55 |  ;      ^TMP("SDNAVB",$J,division,credit_pair,clinic_ifn)='y'
 | 
|---|
 | 56 |  ;      where 'y' consists of: 
 | 
|---|
 | 57 |  ;      piece 1 = % non-follow-up next ava. appts. within 30 days*
 | 
|---|
 | 58 |  ;            2 = % non-follow-up next ava. appts. within 30 days**
 | 
|---|
 | 59 |  ;            3 = % non-follow-up non-next ava. appts. within 30 days*
 | 
|---|
 | 60 |  ;            4 = % non-follow-up non-next ava. appts. within 30 days**
 | 
|---|
 | 61 |  ;            5 = sum of squared wait time next ava. appts.**
 | 
|---|
 | 62 |  ;            6 = sum of squared wait time non-follow-up appts.*
 | 
|---|
 | 63 |  ;            7 = sum of squared wait time non-follow-up appts.**
 | 
|---|
 | 64 |  ;            8 = total non-follow-up appointments
 | 
|---|
 | 65 |  ;
 | 
|---|
 | 66 |  ;              * desired date to appointment date
 | 
|---|
 | 67 |  ;             ** transaction date to appointment date         
 | 
|---|
 | 68 |  ;
 | 
|---|
 | 69 |  N SDT,SDCT,DFN,SDADT,SDAP,SDAP0,SDWAIT,SDSFU,SDCWT3,SDAVE
 | 
|---|
 | 70 |  N SDCL,SDFLAG,SDX,SDY,SDZ,SDI,SC0,SDCP,SDSDEV,SDSDDT,SDAVE2
 | 
|---|
 | 71 |  S SDT=SDBDT-1,(SDOUT,SDCT)=0
 | 
|---|
 | 72 |  K ^TMP("SDWNAVA",$J),^TMP("SDXNAVA",$J),^TMP("SDYNAVA",$J),^TMP("SDZNAVA",$J),^TMP("SDNAVA",$J),^TMP("SDNAVB",$J)
 | 
|---|
 | 73 |  ;Iterate through 'date scheduled' xref
 | 
|---|
 | 74 |  F  S SDT=$O(^DPT("ASADM",SDT)) Q:SDOUT!'SDT!(SDT>SDEDT)  S DFN=0 D
 | 
|---|
 | 75 |  .F  S DFN=$O(^DPT("ASADM",SDT,DFN)) Q:SDOUT!'DFN  S SDADT=0 D
 | 
|---|
 | 76 |  ..I $G(SDREPORT(5))=1 I '$D(^TMP("SDIPLST",$J,DFN)) Q  ;only selected patient if (5)
 | 
|---|
 | 77 |  ..Q:$E($P($G(^DPT(DFN,0)),U,9),1,5)="00000"  ;exclude test patients
 | 
|---|
 | 78 |  ..F  S SDADT=$O(^DPT("ASADM",SDT,DFN,SDADT)) Q:SDOUT!'SDADT  D
 | 
|---|
 | 79 |  ...;Check for 'stop task' request
 | 
|---|
 | 80 |  ...S SDCT=SDCT+1 I SDCT#1000=0 D STOP Q:SDOUT
 | 
|---|
 | 81 |  ...;Get appointment node
 | 
|---|
 | 82 |  ...S SDAP0=$G(^DPT(DFN,"S",SDADT,0)) Q:$P(SDAP0,U,19)'=SDT
 | 
|---|
 | 83 |  ...I '$G(SDREPORT(5)) Q:$P(SDAP0,U,2)="C"!($P(SDAP0,U,2)="CA")   ;quit if cancelled by clinic
 | 
|---|
 | 84 |  ...S SDCL=+SDAP0 Q:SDCL<1  ;get clinic
 | 
|---|
 | 85 |  ...;'next ava.' appointment indicator
 | 
|---|
 | 86 |  ...S SDFLAG=+$P(SDAP0,U,26)
 | 
|---|
 | 87 |  ...;'date desired' and 'follow up visit' indicator
 | 
|---|
 | 88 |  ...S SDX=$G(^DPT(DFN,"S",SDADT,1))
 | 
|---|
 | 89 |  ...S SDSDDT=+$P(SDX,U),SDSFU=$P(SDX,U,2),SDSDEV=""
 | 
|---|
 | 90 |  ...;Calculate wait time 1 (transaction date to appointment)
 | 
|---|
 | 91 |  ...S SDWAIT=$S(SDADT<SDT:0,1:$$FMDIFF^XLFDT(SDADT,SDT,1))
 | 
|---|
 | 92 |  ...;Calculate wait time 2 (date desired to appointment)
 | 
|---|
 | 93 |  ...S SDCWT3=$$CWT3(SDADT,SDFLAG,SDSDDT,SDSFU,.SDSDEV,.SDX,.SDY,.SDZ)
 | 
|---|
 | 94 |  ...;Gather patient appointment list information
 | 
|---|
 | 95 |  ...I $G(SDREPORT(4)),$D(^TMP("SDPLIST",$J,SDCL)) D
 | 
|---|
 | 96 |  ....N SDPNAME,SDATA,SDSSN
 | 
|---|
 | 97 |  ....S SDATA=$G(^DPT(DFN,0))
 | 
|---|
 | 98 |  ....S SDSSN=$P(SDATA,U,9),SDPNAME=$P(SDATA,U) Q:'$L(SDPNAME)
 | 
|---|
 | 99 |  ....S SDATA=SDSSN_U_$P(SDAP0,U,25)_U_SDFLAG_U_SDSDDT_U_SDSFU_U_SDWAIT_U_SDSDEV
 | 
|---|
 | 100 |  ....S ^TMP("SDPLIST",$J,SDCL,SDT,SDPNAME,DFN,SDADT)=SDATA
 | 
|---|
 | 101 |  ....Q
 | 
|---|
 | 102 |  ...I $G(SDREPORT(5)) I $D(^TMP("SDIPLST",$J,DFN,SDCL)) D GEN5A^SCRPW78(SDAP0,DFN,SDADT,SDCL,SDWAIT,SDT,SDSFU,SDSDEV,SDSDDT,SDFLAG)
 | 
|---|
 | 103 |  ...;Accrue phase II values ('next ava.' appts.)
 | 
|---|
 | 104 |  ...S $P(^TMP("SDXNAVA",$J,SDCL),U,((SDFLAG*2)+1))=$P($G(^TMP("SDXNAVA",$J,SDCL)),U,((SDFLAG*2)+1))+1
 | 
|---|
 | 105 |  ...S $P(^TMP("SDXNAVA",$J,SDCL),U,((SDFLAG*2)+2))=$P(^TMP("SDXNAVA",$J,SDCL),U,((SDFLAG*2)+2))+SDWAIT
 | 
|---|
 | 106 |  ...I SDWAIT<31 S $P(^TMP("SDXNAVA",$J,SDCL),U,9+(SDFLAG#2))=$P(^TMP("SDXNAVA",$J,SDCL),U,9+(SDFLAG#2))+1
 | 
|---|
 | 107 |  ...;Accrue sum of squared wait time for standard deviation
 | 
|---|
 | 108 |  ...I SDFLAG#2 S $P(^TMP("SDWNAVA",$J,SDCL),U,5)=$P($G(^TMP("SDWNAVA",$J,SDCL)),U,5)+(SDWAIT*SDWAIT)
 | 
|---|
 | 109 |  ...;Accrue phase III values ('date desired' deviation)
 | 
|---|
 | 110 |  ...I SDCWT3 D
 | 
|---|
 | 111 |  ....S $P(^TMP("SDYNAVA",$J,SDCL),U,SDX)=$P($G(^TMP("SDYNAVA",$J,SDCL)),U,SDX)+1
 | 
|---|
 | 112 |  ....S $P(^TMP("SDYNAVA",$J,SDCL),U,SDY)=$P(^TMP("SDYNAVA",$J,SDCL),U,SDY)+SDSDEV
 | 
|---|
 | 113 |  ....S:SDZ $P(^TMP("SDYNAVA",$J,SDCL),U,SDZ)=$P(^TMP("SDYNAVA",$J,SDCL),U,SDZ)+SDWAIT
 | 
|---|
 | 114 |  ....;Gather additional information for non-follow-up appointments
 | 
|---|
 | 115 |  ....I 'SDSFU D
 | 
|---|
 | 116 |  .....;Accrue next ava. and non-next ava. appts. less than 31 days
 | 
|---|
 | 117 |  .....N SDP S SDP=$S(SDFLAG#2:1,1:3)
 | 
|---|
 | 118 |  .....I SDSDEV<31 S $P(^TMP("SDWNAVA",$J,SDCL),U,SDP)=$P($G(^TMP("SDWNAVA",$J,SDCL)),U,SDP)+1
 | 
|---|
 | 119 |  .....I SDWAIT<31 S $P(^TMP("SDWNAVA",$J,SDCL),U,SDP+1)=$P($G(^TMP("SDWNAVA",$J,SDCL)),U,SDP+1)+1
 | 
|---|
 | 120 |  .....;Accrue sum of squared wait time for standard deviation
 | 
|---|
 | 121 |  .....S $P(^TMP("SDWNAVA",$J,SDCL),U,6)=$P($G(^TMP("SDWNAVA",$J,SDCL)),U,6)+(SDSDEV*SDSDEV)
 | 
|---|
 | 122 |  .....S $P(^TMP("SDWNAVA",$J,SDCL),U,7)=$P(^TMP("SDWNAVA",$J,SDCL),U,7)+(SDWAIT*SDWAIT)
 | 
|---|
 | 123 |  .....;Total of non-follow-up appointments
 | 
|---|
 | 124 |  .....S $P(^TMP("SDWNAVA",$J,SDCL),U,8)=$P(^TMP("SDWNAVA",$J,SDCL),U,8)+1
 | 
|---|
 | 125 |  .....Q
 | 
|---|
 | 126 |  ....Q
 | 
|---|
 | 127 |  ...;Accrue values for daily detail
 | 
|---|
 | 128 |  ...Q:SDEX=1!(SDFMT'="D")
 | 
|---|
 | 129 |  ...S $P(^TMP("SDXNAVA",$J,SDCL,SDT),U,((SDFLAG*2)+1))=$P($G(^TMP("SDXNAVA",$J,SDCL,SDT)),U,((SDFLAG*2)+1))+1
 | 
|---|
 | 130 |  ...S $P(^TMP("SDXNAVA",$J,SDCL,SDT),U,((SDFLAG*2)+2))=$P(^TMP("SDXNAVA",$J,SDCL,SDT),U,((SDFLAG*2)+2))+SDWAIT
 | 
|---|
 | 131 |  ...I SDWAIT<31 S $P(^TMP("SDXNAVA",$J,SDCL,SDT),U,9+(SDFLAG#2))=$P($G(^TMP("SDXNAVA",$J,SDCL,SDT)),U,9+(SDFLAG#2))+1
 | 
|---|
 | 132 |  ...I SDCWT3 D
 | 
|---|
 | 133 |  ....S $P(^TMP("SDYNAVA",$J,SDCL,SDT),U,SDX)=$P($G(^TMP("SDYNAVA",$J,SDCL,SDT)),U,SDX)+1
 | 
|---|
 | 134 |  ....S $P(^TMP("SDYNAVA",$J,SDCL,SDT),U,SDY)=$P(^TMP("SDYNAVA",$J,SDCL,SDT),U,SDY)+SDSDEV
 | 
|---|
 | 135 |  ....S:SDZ $P(^TMP("SDYNAVA",$J,SDCL,SDT),U,SDZ)=$P(^TMP("SDYNAVA",$J,SDCL,SDT),U,SDZ)+SDWAIT
 | 
|---|
 | 136 |  ...Q
 | 
|---|
 | 137 |  ..Q
 | 
|---|
 | 138 |  .Q
 | 
|---|
 | 139 |  Q:SDOUT  S SDCL=0
 | 
|---|
 | 140 |  D ACCRUE^SCRPW77
 | 
|---|
 | 141 |  Q
 | 
|---|
 | 142 |  ;
 | 
|---|
 | 143 | STOP ;Check for stop task request
 | 
|---|
 | 144 |  S:$D(ZTQUEUED) (SDOUT,ZTSTOP)=$S($$S^%ZTLOAD:1,1:0) Q
 | 
|---|
 | 145 |  ;
 | 
|---|
 | 146 | CWT3(SDADT,SDFLAG,SDSDDT,SDSFU,SDSDEV,SDX,SDY,SDZ)      ;Get phase III data
 | 
|---|
 | 147 |  ;Input: SDADT=appointment date
 | 
|---|
 | 148 |  ;Input: SDFLAG='next ava.' appointment indicator
 | 
|---|
 | 149 |  ;Input: SDSDDT=desired date
 | 
|---|
 | 150 |  ;Input: SDSFU=follow up indicator
 | 
|---|
 | 151 |  ;Input: SDSDEV=deviation from desired date (pass by reference)
 | 
|---|
 | 152 |  ;Input: SDX, SDY, SDZ=string locations to update (pass by reference)
 | 
|---|
 | 153 |  ;Output: '1' if phase III data exists, '0' otherwise
 | 
|---|
 | 154 |  ;
 | 
|---|
 | 155 |  N SDDCAT
 | 
|---|
 | 156 |  I '$L(SDSDDT)!'$L(SDSFU) Q 0  ;no phase III data
 | 
|---|
 | 157 |  S SDSDEV=$S(SDADT<SDSDDT:0,1:$$FMDIFF^XLFDT(SDADT,SDSDDT,1))  ;wait time
 | 
|---|
 | 158 |  S SDDCAT=$$DCAT(SDSDEV)  ;date range category
 | 
|---|
 | 159 |  ;follow-up next ava. appts.
 | 
|---|
 | 160 |  I SDSFU,SDFLAG#2 S SDX=1,SDY=2,SDZ=0 Q 1
 | 
|---|
 | 161 |  ;follow-up non-next ava. appts.
 | 
|---|
 | 162 |  I SDSFU,'(SDFLAG#2) S SDX=SDDCAT*2+1,SDY=SDX+1,SDZ=0 Q 1
 | 
|---|
 | 163 |  ;non-follow-up next ava. appts.
 | 
|---|
 | 164 |  I 'SDSFU,SDFLAG#2 S SDX=13,SDY=14,SDZ=0 Q 1
 | 
|---|
 | 165 |  ;non-follow-up non-next ava. appts.
 | 
|---|
 | 166 |  I 'SDSFU,'(SDFLAG#2) S SDX=SDDCAT+4*3,SDY=SDX+1,SDZ=SDX+2
 | 
|---|
 | 167 |  Q 1
 | 
|---|
 | 168 |  ;
 | 
|---|
 | 169 | DCAT(SDSDEV)    ;Determine date range category
 | 
|---|
 | 170 |  ;Input: SDSDEV=wait time
 | 
|---|
 | 171 |  ;Output: category where '1' = <2 days
 | 
|---|
 | 172 |  ;                       '2' = 2-7 days
 | 
|---|
 | 173 |  ;                       '3' = 8-30 days
 | 
|---|
 | 174 |  ;                       '4' = 31-60 days
 | 
|---|
 | 175 |  ;                       '5' = >60 days
 | 
|---|
 | 176 |  ;
 | 
|---|
 | 177 |  Q:SDSDEV<2 1
 | 
|---|
 | 178 |  Q:SDSDEV<8 2
 | 
|---|
 | 179 |  Q:SDSDEV<31 3
 | 
|---|
 | 180 |  Q:SDSDEV<61 4
 | 
|---|
 | 181 |  Q 5
 | 
|---|