| 1 | SCRPW77 ;BP-CIOFO/KEITH,ESW - Clinic Appointment Availability Extract (cont.) ; 5/28/03 4:49pm
 | 
|---|
| 2 |  ;;5.3;Scheduling;**223,241,291**;AUG 13, 1993
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | ACCRUE ;Accrue counts and averages to division and division/credit pair totals
 | 
|---|
| 5 |  F  S SDCL=$O(^TMP("SDXNAVA",$J,SDCL)) Q:'SDCL  D
 | 
|---|
| 6 |  .S SC0=$G(^SC(SDCL,0)) Q:'$L(SC0)  Q:'$$CPAIR^SCRPW71(SC0,.SDCP)
 | 
|---|
| 7 |  .S SDIV=$$DIV^SCRPW71(SC0) Q:'$L(SDIV)
 | 
|---|
| 8 |  .Q:'$D(^TMP("SD",$J,SDIV,SDCP,SDCL))
 | 
|---|
| 9 |  .S:'$D(^TMP("SDNAVA",$J,SDIV,SDCP)) ^TMP("SDNAVA",$J,SDIV,SDCP)=""
 | 
|---|
| 10 |  .I SDMD S:'$D(^TMP("SDNAVA",$J,0,SDCP)) ^TMP("SDNAVA",$J,0,SDCP)=""
 | 
|---|
| 11 |  .S SDX=$P(^TMP("SDXNAVA",$J,SDCL),U,1,8)
 | 
|---|
| 12 |  .S $P(SDX,U,9)=$G(^TMP("SDYNAVA",$J,SDCL))
 | 
|---|
| 13 |  .S $P(SDX,U,38)=$P(^TMP("SDXNAVA",$J,SDCL),U,9,10)
 | 
|---|
| 14 |  .S SDAVE=$$AVE(SDX),^TMP("SDNAVA",$J,SDIV,SDCP,SDCL)=SDAVE
 | 
|---|
| 15 |  .S:$$AVE2(SDCL,.SDAVE2) ^TMP("SDNAVB",$J,SDIV,SDCP,SDCL)=SDAVE2
 | 
|---|
| 16 |  .I SDMD S ^TMP("SDNAVA",$J,0,SDCP,SDCL)=SDAVE
 | 
|---|
| 17 |  .F SDI=1:1:18 S $P(^TMP("SDNAVA",$J,SDIV),U,SDI)=$P($G(^TMP("SDNAVA",$J,SDIV)),U,SDI)+$P(SDX,U,SDI)
 | 
|---|
| 18 |  .F SDI=19:1:39 S $P(^TMP("SDZNAVA",$J,SDIV),U,SDI)=$P($G(^TMP("SDZNAVA",$J,SDIV)),U,SDI)+$P(SDX,U,SDI)
 | 
|---|
| 19 |  .I SDMD D
 | 
|---|
| 20 |  ..F SDI=1:1:18 S $P(^TMP("SDNAVA",$J,0),U,SDI)=$P($G(^TMP("SDNAVA",$J,0)),U,SDI)+$P(SDX,U,SDI)
 | 
|---|
| 21 |  ..F SDI=19:1:39 S $P(^TMP("SDZNAVA",$J,0),U,SDI)=$P($G(^TMP("SDNZAVA",$J,0)),U,SDI)+$P(SDX,U,SDI)
 | 
|---|
| 22 |  ..Q
 | 
|---|
| 23 |  .F SDI=1:1:18 S $P(^TMP("SDNAVA",$J,SDIV,SDCP),U,SDI)=$P(^TMP("SDNAVA",$J,SDIV,SDCP),U,SDI)+$P(SDX,U,SDI)
 | 
|---|
| 24 |  .F SDI=19:1:39 S $P(^TMP("SDZNAVA",$J,SDIV,SDCP),U,SDI)=$P($G(^TMP("SDZNAVA",$J,SDIV,SDCP)),U,SDI)+$P(SDX,U,SDI)
 | 
|---|
| 25 |  .I SDMD D
 | 
|---|
| 26 |  ..F SDI=1:1:18 S $P(^TMP("SDNAVA",$J,0,SDCP),U,SDI)=$P(^TMP("SDNAVA",$J,0,SDCP),U,SDI)+$P(SDX,U,SDI)
 | 
|---|
| 27 |  ..F SDI=19:1:39 S $P(^TMP("SDZNAVA",$J,0,SDCP),U,SDI)=$P($G(^TMP("SDZNAVA",$J,0,SDCP)),U,SDI)+$P(SDX,U,SDI)
 | 
|---|
| 28 |  ..Q
 | 
|---|
| 29 |  .S SDT=0 F  S SDT=$O(^TMP("SDXNAVA",$J,SDCL,SDT)) Q:SDOUT!'SDT  D
 | 
|---|
| 30 |  ..S SDX=$P(^TMP("SDXNAVA",$J,SDCL,SDT),U,1,8)
 | 
|---|
| 31 |  ..S $P(SDX,U,9)=$G(^TMP("SDYNAVA",$J,SDCL,SDT))
 | 
|---|
| 32 |  ..S $P(SDX,U,38)=$P(^TMP("SDXNAVA",$J,SDCL,SDT),U,9,10)
 | 
|---|
| 33 |  ..S ^TMP("SDNAVA",$J,SDIV,SDCP,SDCL,SDT)=$$AVE(SDX)
 | 
|---|
| 34 |  ..Q
 | 
|---|
| 35 |  .Q
 | 
|---|
| 36 |  S SDIV="" F  S SDIV=$O(^TMP("SDNAVA",$J,SDIV)) Q:'$L(SDIV)  D
 | 
|---|
| 37 |  .S SDX=^TMP("SDNAVA",$J,SDIV)_U_$P($G(^TMP("SDZNAVA",$J,SDIV)),U,19,39)
 | 
|---|
| 38 |  .S ^TMP("SDNAVA",$J,SDIV)=$$AVE(SDX)
 | 
|---|
| 39 |  .S SDCP=0 F  S SDCP=$O(^TMP("SDNAVA",$J,SDIV,SDCP)) Q:'SDCP  D
 | 
|---|
| 40 |  ..S SDX=^TMP("SDNAVA",$J,SDIV,SDCP)_U_$P($G(^TMP("SDZNAVA",$J,SDIV,SDCP)),U,19,39)
 | 
|---|
| 41 |  ..S ^TMP("SDNAVA",$J,SDIV,SDCP)=$$AVE(SDX)
 | 
|---|
| 42 |  ..Q
 | 
|---|
| 43 |  .Q
 | 
|---|
| 44 |  K ^TMP("SDWNAVA",$J),^TMP("SDXNAVA",$J),^TMP("SDYNAVA",$J),^TMP("SDZNAVA",$J)
 | 
|---|
| 45 |  Q
 | 
|---|
| 46 |  ;
 | 
|---|
| 47 | AVE(SDX) ;Calculate averages
 | 
|---|
| 48 |  ;Input: SDX=string of appointment totals and total waiting time
 | 
|---|
| 49 |  ;Output: string of appointment totals and average waiting time
 | 
|---|
| 50 |  N SDI,SDY,SDZ
 | 
|---|
| 51 |  F SDI=2:2:22,24:3:36 D
 | 
|---|
| 52 |  .S SDY=+$P(SDX,U,(SDI-1)),$P(SDX,U,(SDI-1))=SDY
 | 
|---|
| 53 |  .S $P(SDX,U,SDI)=$FN($S(SDY=0:0,1:$P(SDX,U,SDI)/SDY),"",1)
 | 
|---|
| 54 |  .Q:SDI<24
 | 
|---|
| 55 |  .S $P(SDX,U,SDI+1)=$FN($S(SDY=0:0,1:$P(SDX,U,SDI+1)/SDY),"",1)
 | 
|---|
| 56 |  .Q
 | 
|---|
| 57 |  S SDY=$P(SDX,U)+$P(SDX,U,5),SDZ=+$P(SDX,U,38)*100
 | 
|---|
| 58 |  S $P(SDX,U,38)=$FN($S(SDY=0:0,1:(SDZ/SDY)),"",1)
 | 
|---|
| 59 |  S SDY=$P(SDX,U,3)+$P(SDX,U,7),SDZ=+$P(SDX,U,39)*100
 | 
|---|
| 60 |  S $P(SDX,U,39)=$FN($S(SDY=0:0,1:(SDZ/SDY)),"",1)
 | 
|---|
| 61 |  Q SDX
 | 
|---|
| 62 |  ;
 | 
|---|
| 63 | AVE2(SDCL,SDAVE2) ;Format additional fields
 | 
|---|
| 64 |  ;Input: SDCL=clinic ifn
 | 
|---|
| 65 |  ;Input: SDAVE2=variable to return values (pass by reference)
 | 
|---|
| 66 |  N SDX,SDY,SDI
 | 
|---|
| 67 |  S SDAVE2=$G(^TMP("SDWNAVA",$J,SDCL))
 | 
|---|
| 68 |  Q:'$L(SDAVE2) 0
 | 
|---|
| 69 |  S SDY=+$P(SDAVE2,U,8)
 | 
|---|
| 70 |  F SDI=1:1:4 D
 | 
|---|
| 71 |  .S SDX=$P(SDAVE2,U,SDI)*100
 | 
|---|
| 72 |  .S $P(SDAVE2,U,SDI)=$FN($S(SDY=0:0,1:(SDX/SDY)),"",1)
 | 
|---|
| 73 |  .Q
 | 
|---|
| 74 |  Q 1
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 | STOP ;Check for stop task request
 | 
|---|
| 77 |  S:$D(ZTQUEUED) (SDOUT,ZTSTOP)=$S($$S^%ZTLOAD:1,1:0) Q
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 | OUT4 ;Output patient list
 | 
|---|
| 80 |  N SDY,SDI,SDPNAME,DFN,SDADT
 | 
|---|
| 81 |  I '$O(^TMP("SDPLIST",$J,SC,0)) D  Q
 | 
|---|
| 82 |  .S SDY="No appointments scheduled during this date range were found."
 | 
|---|
| 83 |  .W !!?(IOM-$L(SDY)\2),SDY Q
 | 
|---|
| 84 |  S SDI=0 F  S SDI=$O(^TMP("SDPLIST",$J,SC,SDI)) Q:SDOUT!'SDI  D
 | 
|---|
| 85 |  .S SDPNAME=""
 | 
|---|
| 86 |  .F  S SDPNAME=$O(^TMP("SDPLIST",$J,SC,SDI,SDPNAME)) Q:SDOUT!(SDPNAME="")  D
 | 
|---|
| 87 |  ..S DFN=0
 | 
|---|
| 88 |  ..F  S DFN=$O(^TMP("SDPLIST",$J,SC,SDI,SDPNAME,DFN)) Q:SDOUT!(DFN="")  D
 | 
|---|
| 89 |  ...S SDADT=0
 | 
|---|
| 90 |  ...F  S SDADT=$O(^TMP("SDPLIST",$J,SC,SDI,SDPNAME,DFN,SDADT)) Q:SDOUT!'SDADT  D
 | 
|---|
| 91 |  ....S SDATA=^TMP("SDPLIST",$J,SC,SDI,SDPNAME,DFN,SDADT)
 | 
|---|
| 92 |  ....I 'SDXM,$Y>(IOSL-SDFLEN) D FOOTER(SDREPORT),HDR^SCRPW76(1,SDREPORT,SDIV,SDCP,SC)
 | 
|---|
| 93 |  ....Q:SDOUT
 | 
|---|
| 94 |  ....W !,$$DTX(SDI),?13,$E(SDPNAME,1,23),?38,$P(SDATA,U)
 | 
|---|
| 95 |  ....W ?50,$$DTX(SDADT),?69,$$SRTY($P(SDATA,U,2))
 | 
|---|
| 96 |  ....W ?98,$P(SDATA,U,3),?102,$$DTX($P(SDATA,U,4))
 | 
|---|
| 97 |  ....W ?115,$S($P(SDATA,U,5)=0:"NO",$P(SDATA,U,5)=1:"YES",1:"")
 | 
|---|
| 98 |  ....W ?120,$J($P(SDATA,U,7),5,0),?127,$J($P(SDATA,U,6),5,0)
 | 
|---|
| 99 |  ....Q
 | 
|---|
| 100 |  ...Q
 | 
|---|
| 101 |  ..Q
 | 
|---|
| 102 |  .Q
 | 
|---|
| 103 |  Q:SDOUT  D FOOTER(SDREPORT)
 | 
|---|
| 104 |  Q
 | 
|---|
| 105 | OUT5(DFN,SC) ;Output patient list
 | 
|---|
| 106 |  N SDY,SDI,SDPNAME,SDADT
 | 
|---|
| 107 |  I '$O(^TMP("SDIPLST",$J,DFN,SC,0)) D  Q
 | 
|---|
| 108 |  .S SDY="No appointments scheduled during this date range were found."
 | 
|---|
| 109 |  .W !!?(IOM-$L(SDY)\2),SDY Q
 | 
|---|
| 110 |  S SDI=0 F  S SDI=$O(^TMP("SDIPLST",$J,DFN,SC,SDI)) Q:SDOUT!'SDI  D
 | 
|---|
| 111 |  .S SDPNAME=""
 | 
|---|
| 112 |  .F  S SDPNAME=$O(^TMP("SDIPLST",$J,DFN,SC,SDI,SDPNAME)) Q:SDOUT!(SDPNAME="")  D
 | 
|---|
| 113 |  ..S SDADT=0
 | 
|---|
| 114 |  ..F  S SDADT=$O(^TMP("SDIPLST",$J,DFN,SC,SDI,SDPNAME,SDADT)) Q:SDOUT!'SDADT  D
 | 
|---|
| 115 |  ...S SDATA=^TMP("SDIPLST",$J,DFN,SC,SDI,SDPNAME,SDADT)
 | 
|---|
| 116 |  ...I 'SDXM,$Y>(IOSL-SDFLEN) D FOOTER(SDREPORT),HDR^SCRPW76(1,SDREPORT,SDIV,SDCP,SC)
 | 
|---|
| 117 |  ...Q:SDOUT
 | 
|---|
| 118 |  ...W !,$$DTXN(SDI),?11,$$SRTY($P(SDATA,U,2)),?31,$$DTXN($P(SDATA,U,4))
 | 
|---|
| 119 |  ...W ?42,$$DTXN(SDADT),?52,$J($P(SDATA,U,7),5,0)
 | 
|---|
| 120 |  ...W ?59,$J($P(SDATA,U,6),5,0),?69,$P(SDATA,U,3)
 | 
|---|
| 121 |  ...W ?73,$S($P(SDATA,U,5)=0:"NO",$P(SDATA,U,5)=1:"YES",1:"")
 | 
|---|
| 122 |  ...W ?79,$$DTXN($P(SDATA,U,8)),?96,$P(SDATA,U,9),?102,$P($$DTXN($P(SDATA,U,10)),"@")
 | 
|---|
| 123 |  ...I +$P(SDATA,U,11)>0 N SDFN,SDARR,DR,DIQ,DIC,DA D  W ?113,$G(SDARR(SDFN,DA,DR,"I"))
 | 
|---|
| 124 |  ....S DR=".01",DIQ="SDARR(",DIQ(0)="I",DIC=200,SDFN=200,DA=$P(SDATA,U,11) D EN^DIQ1
 | 
|---|
| 125 |  ...Q
 | 
|---|
| 126 |  ..Q
 | 
|---|
| 127 |  .Q
 | 
|---|
| 128 |  Q:SDOUT  D FOOTER(SDREPORT)
 | 
|---|
| 129 |  Q
 | 
|---|
| 130 |  ;
 | 
|---|
| 131 | SRTY(SDSRTY) ;Externalize scheduling request type
 | 
|---|
| 132 |  ;Input: SDSRTY=internal value for request type
 | 
|---|
| 133 |  Q:'$L(SDSRTY) ""
 | 
|---|
| 134 |  Q:SDSRTY="N" "Next available"
 | 
|---|
| 135 |  Q:SDSRTY="C" "Not-next ava-C/R" ;Clinician Request
 | 
|---|
| 136 |  Q:SDSRTY="P" "Not-next ava-P/R" ;Patient Request
 | 
|---|
| 137 |  Q:SDSRTY="W" "Walk in appoint"
 | 
|---|
| 138 |  Q:SDSRTY="M" "Multi booking"
 | 
|---|
| 139 |  Q:SDSRTY="A" "Auto rebook"
 | 
|---|
| 140 |  Q "Not-next available"
 | 
|---|
| 141 |  ;
 | 
|---|
| 142 | DTX(Y) ;Externalize date
 | 
|---|
| 143 |  X ^DD("DD")
 | 
|---|
| 144 |  Q Y
 | 
|---|
| 145 |  ;
 | 
|---|
| 146 | DTXN(Y) ;External date formated to abbreviate
 | 
|---|
| 147 |  I +Y=0 S Y="" Q Y
 | 
|---|
| 148 |  X ^DD("DD")
 | 
|---|
| 149 |  N SDSTR S Y=$P(Y,",")_","_$E($P(Y,",",2),3,10)
 | 
|---|
| 150 |  I $L(Y)#2=0 S Y=$E(Y,1,3)_"  "_$P(Y," ",2)
 | 
|---|
| 151 |  Q Y
 | 
|---|
| 152 |  ;
 | 
|---|
| 153 | FOOTER(SDREPORT)  ;Print footer
 | 
|---|
| 154 |  ;Input: SDREPORT=report element to print
 | 
|---|
| 155 |  N SDI,SDFL S SDFL=$S(SDREPORT=1:10,SDREPORT=2:8,SDREPORT=5:13,1:9)
 | 
|---|
| 156 |  I SDXM D  Q
 | 
|---|
| 157 |  .D XMTX^SCRPW73(" ") S SDI=0
 | 
|---|
| 158 |  .F  S SDI=$O(SDFOOT(SDREPORT,SDI)) Q:'SDI  D XMTX^SCRPW73(SDFOOT(SDREPORT,SDI))
 | 
|---|
| 159 |  .Q
 | 
|---|
| 160 |  F SDI=1:1:80 Q:$Y>(IOSL-SDFL)  W !
 | 
|---|
| 161 |  S SDI=0
 | 
|---|
| 162 |  F  S SDI=$O(SDFOOT(SDREPORT,SDI)) Q:'SDI  W !,SDFOOT(SDREPORT,SDI)
 | 
|---|
| 163 |  Q
 | 
|---|
| 164 |  ;
 | 
|---|
| 165 | FOOT(SDTX) ;Report footer for retrospective report
 | 
|---|
| 166 |  ;Input: SDTX=array to return text
 | 
|---|
| 167 |  I $G(SDREPORT(1)) D
 | 
|---|
| 168 |  .S SDTX(1,1)=SDLINE
 | 
|---|
| 169 |  .S SDTX(1,2)="NOTE:  TYPE '0' represents appointments scheduled during the report time frame not indicated by the user or by calculation to be"
 | 
|---|
| 170 |  .S SDTX(1,3)="'next available' appointments.  TYPE '1' represents appointments defined by the user as being 'next available' appointments.  TYPE"
 | 
|---|
| 171 |  .S SDTX(1,4)="'2' represents appointments calculated to be 'next available' appointments.  TYPE '3' represents appointments indicated both by the"
 | 
|---|
| 172 |  .S SDTX(1,5)="user and by calculation to be 'next available' appointments.  WAIT TIME is the average number of days from the date an appointment"
 | 
|---|
| 173 |  .S SDTX(1,6)="was scheduled to the date it is to be performed.  The '% NNA' and '% NA' columns reflect percentage of appointments scheduled within"
 | 
|---|
| 174 |  .S SDTX(1,7)="30 days for 'non-next available' appointments (types 0 & 2) and 'next available' appointments (types 1 & 3), respectively."
 | 
|---|
| 175 |  .S SDTX(1,8)=SDLINE Q
 | 
|---|
| 176 |  I $G(SDREPORT(2)) D
 | 
|---|
| 177 |  .S SDTX(2,1)=SDLINE
 | 
|---|
| 178 |  .S SDTX(2,2)="NOTE:  The date range categories ('0-1', '2-7', '8-30', etc.) are based on the difference between the 'desired date' defined for the"
 | 
|---|
| 179 |  .S SDTX(2,3)="appointment and the date the appointment was performed.  'Wait Time' reflects the average of this difference for all appointments in"
 | 
|---|
| 180 |  .S SDTX(2,4)="each category.  'Follow up' status is determined by encounter activity to the same DSS ID credit pair as the appointment clinic"
 | 
|---|
| 181 |  .S SDTX(2,5)="within the previous 24 months."
 | 
|---|
| 182 |  .S SDTX(2,6)=SDLINE Q
 | 
|---|
| 183 |  I $G(SDREPORT(3)) D
 | 
|---|
| 184 |  .S SDTX(3,1)=SDLINE
 | 
|---|
| 185 |  .S SDTX(3,2)="NOTE:  The date range categories ('0-1', '2-7', '8-30', etc.) are based on the difference between the 'desired date' defined for the"
 | 
|---|
| 186 |  .S SDTX(3,3)="appointment and the date the appointment was performed.  'Wait Time1' reflects the average difference between the 'desired date' and"
 | 
|---|
| 187 |  .S SDTX(3,4)="the date the appointment was performed.  'Wait Time2' reflects the average difference between the transaction date (the date the"
 | 
|---|
| 188 |  .S SDTX(3,5)="appointment was entered by the Scheduling package user) and the date the appointment was performed.  'Non-follow up' status is"
 | 
|---|
| 189 |  .S SDTX(3,6)="determined by the absence of encounter activity to the same DSS ID credit pair as the appointment clinic in the previous 24 months."
 | 
|---|
| 190 |  .S SDTX(3,7)=SDLINE Q
 | 
|---|
| 191 |  I $G(SDREPORT(4)) D
 | 
|---|
| 192 |  .S SDTX(4,1)=SDLINE
 | 
|---|
| 193 |  .S SDTX(4,2)="NOTE:  'Next Ava. Ind.' Values--'0' = not indicated by the user or calculation to be a 'next available' appointment, '1' = defined"
 | 
|---|
| 194 |  .S SDTX(4,3)="by the user as a 'next available' appointment, '2' = indicated by calculation to be a 'next available' appointment, '3' = indicated"
 | 
|---|
| 195 |  .S SDTX(4,4)="by the user and by calculation to be a 'next available' appointment.  'Wait Time1' = the difference between the 'date desired' and"
 | 
|---|
| 196 |  .S SDTX(4,5)="the date of the appointment.  'Wait Time2' = the difference between the 'date scheduled' and the date of the appointment."
 | 
|---|
| 197 |  .S SDTX(4,6)=SDLINE Q
 | 
|---|
| 198 |  I $G(SDREPORT(5)) D FOOT^SCRPW78(.SDTX,SDLINE) Q
 | 
|---|
| 199 |  Q
 | 
|---|