Changeset 1467 for Scheduling/trunk/m/BSDXAPI1.m
- Timestamp:
- Jul 5, 2012, 7:42:34 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Scheduling/trunk/m/BSDXAPI1.m
r1466 r1467 1 BSDXAPI1 ; VEN/SMH - SCHEDULING APIs - Continued!!! ; 7/ 3/12 12:37pm1 BSDXAPI1 ; VEN/SMH - SCHEDULING APIs - Continued!!! ; 7/5/12 12:55pm 2 2 ;;1.7T1;BSDX;;Aug 31, 2011;Build 18 3 3 ; Licensed under LGPL … … 42 42 ; CANCELCK exists for the same purpose. 43 43 ; CHECKINK ditto 44 ; New API: $$NO WSHOW^BSDXAPI1 for no-showing patients44 ; New API: $$NOSHOW^BSDXAPI1 for no-showing patients 45 45 ; Moved RMCI from BSDXAPI to BSDXAPI1 because BSDXAPI1 is getting larger 46 46 ; than 20000 characters. 47 ; Added RMCICK (Remove check-in check) 48 ; Moved Availability update EPs in BSDX07 and BSDX08 b/c they really 49 ; belong to PIMS, not to the Scheduling GUI. $$MAKE and $$CANCEL now 50 ; call the EPs here. 47 51 ; 48 52 NOSHOW(PAT,CLINIC,DATE,NSFLAG) ; $$ PEP; No-show Patient at appt date (new in v1.7) … … 125 129 D BEFORE^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL) 126 130 ; 131 ; M Error Test - Simulate behavior when an M error occurs 132 I $G(BSDXDIE2) N X S X=1/0 133 ; 134 ; Simulate a failure to file the data in Fileman 135 I $D(BSDXSIMERR3) Q 1_U_"Simulated Error" 136 ; 127 137 ; remove check-in using filer. 128 138 N BSDXIENS S BSDXIENS=SDDA_","_DATE_","_CLINIC_"," … … 150 160 ; Output: 0 if okay or 1 if error 151 161 ; 162 ; Error for Unit Tests 163 I $G(BSDXSIMERR2) Q 1_U_"Simulated Error" 164 ; 152 165 ; Get appointment IEN in ^SC(DA(2),"S",DA(1),1, 153 166 N SCIEN S SCIEN=$$SCIEN^BSDXAPI(PAT,CLINIC,DATE) 154 167 ; 155 ; If not there, it has been cancelled. 168 ; If not there, it has been cancelled. Okay to Remove Check-in. 156 169 I 'SCIEN QUIT 0 157 170 ; … … 182 195 QUIT 0 183 196 ; 197 AVUPDTCN(BSDXSCD,BSDXSTART,BSDXLEN) ;Update PIMS Clinic availability for cancel 198 ; NB: VEN/SMH: This code has never been tested. It's here for its 199 ; presumptive function, but I don't know whether it works accurately! 200 ;See SDCNP0 201 N SD,S ; Start Date 202 S (SD,S)=BSDXSTART 203 N I ; Clinic IEN in 44 204 S I=BSDXSCD 205 ; if day has no schedule in legacy PIMS, forget about this update. 206 Q:'$D(^SC(I,"ST",SD\1,1)) 207 N SL ; Clinic characteristics node (length of appt, when appts start etc) 208 S SL=^SC(I,"SL") 209 N X ; Hour Clinic Display Begins 210 S X=$P(SL,U,3) 211 N STARTDAY ; When does the day start? 212 S STARTDAY=$S($L(X):X,1:8) ; If defined, use it; otherwise, 8am 213 N SB ; ?? Who knows? Day Start - 1 divided by 100. 214 S SB=STARTDAY-1/100 215 S X=$P(SL,U,6) ; Now X is Display increments per hour 216 N HSI ; Slots per hour, try 1 217 S HSI=$S(X:X,1:4) ; if defined, use it; otherwise, 4 218 N SI ; Slots per hour, try 2 219 S SI=$S(X="":4,X<3:4,X:X,1:4) ; If slots "", or less than 3, then 4 220 N STR ; ?? 221 S STR="#@!$* XXWVUTSRQPONMLKJIHGFEDCBA0123456789jklmnopqrstuvwxyz" 222 N SDDIF ; Slots per hour diff?? 223 S SDDIF=$S(HSI<3:8/HSI,1:2) 224 S SL=BSDXLEN ; Dammit, reusing variable; SL now Appt Length from GUI 225 S S=^SC(I,"ST",SD\1,1) ; reusing var again; S now Day Pattern from PIMS 226 N Y ; Hours since start of Date 227 S Y=SD#1-SB*100 ;SD#1=FM Time portion; -SB minus start of day; conv to hrs 228 N ST ; ?? 229 ; Y#1 -> Minutes; *SI -> * Slots per hour; \.6 trunc min to hour 230 ; Y\1 -> Hours since start of day; * SI: * slots 231 S ST=Y#1*SI\.6+(Y\1*SI) 232 N SS ; how many slots are supposed to be taken by appointment 233 S SS=SL*HSI/60 ; (nb: try SL: 30 min; HSI: 4 slots) 234 N I 235 I Y'<1 D ; If Hours since start of Date is greater than 1 236 . ; loop through pattern. Tired of documenting. 237 . F I=ST+ST:SDDIF D Q:Y="" Q:SS'>0 238 . . S Y=$E(STR,$F(STR,$E(S,I+1))) Q:Y="" 239 . . S S=$E(S,1,I)_Y_$E(S,I+2,999) 240 . . S SS=SS-1 241 . . Q:SS'>0 242 S ^SC(BSDXSCD,"ST",SD\1,1)=S ; new pattern; global set 243 Q 244 ; 245 AVUPDTMK(BSDXSCD,BSDXSTART,BSDXLEN) ; Update RPMS Clinic availability for Make 246 ;SEE SDM1 247 N Y,DFN 248 N SL,STARTDAY,X,SC,SB,HSI,SI,STR,SDDIF,SDMAX,SDDATE,SDDMAX,SDSDATE,CCXN,MXOK,COV,SDPROG 249 N X1,SDEDT,X2,SD,SM,SS,S,SDLOCK,ST,I 250 S Y=BSDXSCD,DFN=BSDXPATID 251 S SL=$G(^SC(+Y,"SL")),X=$P(SL,U,3),STARTDAY=$S($L(X):X,1:8),SC=Y,SB=STARTDAY-1/100,X=$P(SL,U,6),HSI=$S(X=1:X,X:X,1:4),SI=$S(X="":4,X<3:4,X:X,1:4),STR="#@!$* XXWVUTSRQPONMLKJIHGFEDCBA0123456789jklmnopqrstuvwxyz",SDDIF=$S(HSI<3:8/HSI,1:2) K Y 252 ;Determine maximum days for scheduling 253 S SDMAX(1)=$P($G(^SC(+SC,"SDP")),U,2) S:'SDMAX(1) SDMAX(1)=365 254 S (SDMAX,SDDMAX)=$$FMADD^XLFDT(DT,SDMAX(1)) 255 S SDDATE=BSDXSTART 256 S SDSDATE=SDDATE,SDDATE=SDDATE\1 257 1 ;L Q:$D(SDXXX) S CCXN=0 K MXOK,COV,SDPROT Q:DFN<0 S SC=+SC 258 Q:$D(SDXXX) S CCXN=0 K MXOK,COV,SDPROT Q:DFN<0 S SC=+SC 259 S X1=DT,SDEDT=365 S:$D(^SC(SC,"SDP")) SDEDT=$P(^SC(SC,"SDP"),"^",2) 260 S X2=SDEDT D C^%DTC S SDEDT=X 261 S Y=BSDXSTART 262 EN1 S (X,SD)=Y,SM=0 D DOW 263 S I '$D(^SC(SC,"ST",$P(SD,"."),1)) S SS=+$O(^SC(+SC,"T"_Y,SD)) Q:SS'>0 Q:^(SS,1)="" S ^SC(+SC,"ST",$P(SD,"."),1)=$E($P($T(DAY),U,Y+2),1,2)_" "_$E(SD,6,7)_$J("",SI+SI-6)_^(1),^(0)=$P(SD,".") 264 S S=BSDXLEN 265 ;Check if BSDXLEN evenly divisible by appointment length 266 S RPMSL=$P(SL,U) 267 I BSDXLEN<RPMSL S BSDXLEN=RPMSL 268 I BSDXLEN#RPMSL'=0 D 269 . S BSDXINC=BSDXLEN\RPMSL 270 . S BSDXINC=BSDXINC+1 271 . S BSDXLEN=RPMSL*BSDXINC 272 S SL=S_U_$P(SL,U,2,99) 273 SC S SDLOCK=$S('$D(SDLOCK):1,1:SDLOCK+1) Q:SDLOCK>9 274 L +^SC(SC,"ST",$P(SD,"."),1):5 G:'$T SC 275 S SDLOCK=0,S=^SC(SC,"ST",$P(SD,"."),1) 276 S I=SD#1-SB*100,ST=I#1*SI\.6+($P(I,".")*SI),SS=SL*HSI/60*SDDIF+ST+ST 277 I (I<1!'$F(S,"["))&(S'["CAN") L -^SC(SC,"ST",$P(SD,"."),1) Q 278 I SM<7 S %=$F(S,"[",SS-1) S:'%!($P(SL,"^",6)<3) %=999 I $F(S,"]",SS)'<%!(SDDIF=2&$E(S,ST+ST+1,SS-1)["[") S SM=7 279 ; 280 SP I ST+ST>$L(S),$L(S)<80 S S=S_" " G SP 281 S SDNOT=1 282 S ABORT=0 283 F I=ST+ST:SDDIF:SS-SDDIF D Q:ABORT 284 . S ST=$E(S,I+1) S:ST="" ST=" " 285 . S Y=$E(STR,$F(STR,ST)-2) 286 . I S["CAN"!(ST="X"&($D(^SC(+SC,"ST",$P(SD,"."),"CAN")))) S ABORT=1 Q 287 . I Y="" S ABORT=1 Q 288 . S:Y'?1NL&(SM<6) SM=6 S ST=$E(S,I+2,999) S:ST="" ST=" " S S=$E(S,1,I)_Y_ST 289 . Q 290 S ^SC(SC,"ST",$P(SD,"."),1)=S 291 L -^SC(SC,"ST",$P(SD,"."),1) 292 Q 293 DAY ;;^SUN^MON^TUES^WEDNES^THURS^FRI^SATUR 294 ; 295 DOW S %=$E(X,1,3),Y=$E(X,4,5),Y=Y>2&'(%#4)+$E("144025036146",Y) 296 F %=%:-1:281 S Y=%#4=1+1+Y 297 S Y=$E(X,6,7)+Y#7 298 Q 299 ;
Note:
See TracChangeset
for help on using the changeset viewer.