| 1 | SDM1 ;SF/GFT - MAKE APPOINTMENT ; 3/29/05 12:35pm [5/5/05 9:41am]  ; Compiled March 8, 2007 14:55:24  ; Compiled May 9, 2007 13:19:18  ; Compiled August 28, 2007 12:19:08
 | 
|---|
| 2 |  ;;5.3;Scheduling;**32,167,168,80,223,263,273,408,327,478,490,446**;Aug 13, 1993;Build 77
 | 
|---|
| 3 | 1 L  Q:$D(SDXXX)  S CCXN=0 K MXOK,COV,SDPROT Q:DFN<0  S SC=+SC
 | 
|---|
| 4 |  S X1=DT,SDEDT=365 S:$D(^SC(SC,"SDP")) SDEDT=$P(^SC(SC,"SDP"),"^",2)
 | 
|---|
| 5 |  S X2=SDEDT D C^%DTC S SDEDT=X D WRT
 | 
|---|
| 6 |  I $D(^SC(SC,"SI")),$O(^("SI",0))>0 W !,*7,?8,"**** SPECIAL INSTRUCTIONS ****",! S %I=0 F %=0:1 S %I=$O(^SC(SC,"SI",%I)) Q:%I'>0  W ^(%I,0) W:% ! I '%,$O(^SC(SC,"SI",%I))>0 S POP=0 D SPIN Q:POP
 | 
|---|
| 7 |  I $D(SDINA),SDINA>DT D IN W !,?8,@SDMSG K SDMSG
 | 
|---|
| 8 |  G:SDMM RDTY^SDMM
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 | ADT S:'$D(SDW) SDW=""
 | 
|---|
| 11 |  S SDSOH=$S('$D(^SC(SC,"SL")):0,$P(^("SL"),"^",8)']"":0,1:1),CCX=""
 | 
|---|
| 12 |  S SDONCE=$G(SDONCE)+1  ;Prevent repetitive iteration
 | 
|---|
| 13 |  ; Section introduced in 446.
 | 
|---|
| 14 |  N SDDATE1,SDQT,Y  ; Do not allow progress if there is no availability > 120 days after the desired date.
 | 
|---|
| 15 |  S SDDATE1=$S($G(SDDATE)="":DT,1:SDDATE)
 | 
|---|
| 16 |  S Y="" D  Q:Y="^"
 | 
|---|
| 17 |  .F  Q:Y="^"!$$WLCL120^SDM2A(SC,SDDATE1)  D
 | 
|---|
| 18 |  ..S Y=$$WLCLASK^SDM2A() Q:Y="^"  ; Y=0: New date, Y=1: place on EWL, Y="^": quit
 | 
|---|
| 19 |  ..I Y=0 D  Q
 | 
|---|
| 20 |  ...N SDMAX,SDDMAX
 | 
|---|
| 21 |  ...S SDMAX(1)=$P($G(^SC(+SC,"SDP")),U,2) S:'SDMAX(1) SDMAX(1)=365
 | 
|---|
| 22 |  ...S (SDMAX,SDDMAX)=$$FMADD^XLFDT(DT,SDMAX(1))
 | 
|---|
| 23 |  ...S Y=$$DDATE^SDM0(.SDDATE,"0^0",.SDMAX) Q:'Y  ; Y=0: "^" entered, Y=1: date entered
 | 
|---|
| 24 |  ...D D^SDM0
 | 
|---|
| 25 |  ...S SDDATE1=SDDATE
 | 
|---|
| 26 |  ...Q
 | 
|---|
| 27 |  ..D WL^SDM2A(SC)
 | 
|---|
| 28 |  ..S Y="^"  ; quit
 | 
|---|
| 29 |  ..Q
 | 
|---|
| 30 |  .Q
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 |  S X=$S(SDONCE<2:$G(SDSDATE),1:"")  ;Use default date/time if specified as 'desired date'  
 | 
|---|
| 33 |  I 'X R !,"DATE/TIME: ",X:DTIME Q:X="^"!'$$WLCL120A^SDM2A(X,SDDATE1,SC)  ;sd/327,446
 | 
|---|
| 34 |  I X="" D WL(SC) Q  ;sd/446
 | 
|---|
| 35 |  G:X="M"!(X="m") MORDIS^SDM0
 | 
|---|
| 36 |  I X="D"!(X="d") S X=$$REDDT() G:X>0 MORD2^SDM0 S X="" W "  ??",! G ADT
 | 
|---|
| 37 |  I X?1"?".E D  G ADT
 | 
|---|
| 38 |  .W !,"Enter a date/time for the appointment"
 | 
|---|
| 39 |  .W:$D(SD) " or a space to choose the same date/time as the patient you have just previously scheduled into this clinic"
 | 
|---|
| 40 |  .W ".",!,"You may also select 'M' to display the next month's availability or"
 | 
|---|
| 41 |  .W !,"'D' to specify an earlier or later date to begin the availability display."
 | 
|---|
| 42 |  I X=" ",$D(SD),SD S Y=SD D AT^SDUTL W Y S Y=SD G OVR
 | 
|---|
| 43 |  I $E($P(X,"@",2),1,4)?1.4"0" K %DT S X=$P(X,"@"),X=$S($L(X):X,1:"T"),%DT="XF" D ^%DT G ADT:Y'>0 S X1=Y,X2=-1 D C^%DTC S X=X_.24
 | 
|---|
| 44 |  K %DT S %DT="TXEF" D ^%DT
 | 
|---|
| 45 |  ;SD*5.3*408  verify that day hasn't been canceled via "SET UP A CLINIC"
 | 
|---|
| 46 |  I $G(^SC(+SC,"ST",$P(Y,"."),1))'="",^SC(+SC,"ST",$P(Y,"."),1)'["[" D  G ADT
 | 
|---|
| 47 |  .W !,"There is no availability for this date/time.",!
 | 
|---|
| 48 |  I $P(Y,".",2)=24 S X1=$P(Y,"."),X2=1 D C^%DTC S Y=X_".000001"
 | 
|---|
| 49 | OVR I $D(^HOLIDAY($P(Y,"."),0)),'SDSOH W *7,?50,$P(^(0),U,2),"??" K SDSDATE G ADT
 | 
|---|
| 50 |  I $D(SDINA),$P(Y,".")'<SDINA,$S('$D(SDRE):1,SDRE>$P(Y,".")!('SDRE):1,1:0) D IN W !,*7,@SDMSG K SDMSG K SDSDATE G ADT
 | 
|---|
| 51 |  I Y#1=0 K SDSDATE G 1
 | 
|---|
| 52 |  I $P(Y,".")'<SDEDT W !,*7,"EXCEEDS MAXIMUM DAYS FOR FUTURE APPOINTMENT!!",*7 K SDSDATE G ADT
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 | EN1 S (TMPD,X,SD)=Y,SM=0 D DOW  ;SD/478
 | 
|---|
| 55 |  F S=$P(SD,"."):0 S S=+$O(^DPT(DFN,"S",S)) Q:$P(S,".")-($P(SD,"."))  S I=+^(S,0) G ^SDM2:$P(^(0),U,2)'["C"
 | 
|---|
| 56 |  ;
 | 
|---|
| 57 | PRECAN I $D(^DPT(DFN,"S",SD,0)),$P(^(0),U,2)["P" S %=1 W !,"THIS TIME WAS PREVIOUSLY CANCELLED BY THE PATIENT",!,"ARE YOU SURE THAT YOU WANT TO PROCEED" D YN^DICN W:'% !,"ANSWER WITH (Y)ES OR (N)O" I (%-1) K SDSDATE G ADT
 | 
|---|
| 58 |  W !
 | 
|---|
| 59 |  ;SD*5.3*490 - AVCHK/AVCHK1 to check against pat DOB and clinic avail dt
 | 
|---|
| 60 | S N POP S POP=0 D AVCHK G:POP 1
 | 
|---|
| 61 |  N POP S POP=0 D AVCHK1 G:POP 1
 | 
|---|
| 62 |  I '$D(^SC(SC,"ST",$P(SD,"."),1)) S SS=+$O(^SC(+SC,"T"_Y,SD)) G XW:SS'>0,XW:^(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,".")
 | 
|---|
| 63 |  ;
 | 
|---|
| 64 | LEN I $P(SL,U,2)]"" W !,"LENGTH OF APPOINTMENT (IN MINUTES): ",+SL,"// " R S:DTIME I S]"" G:$L(S)>3 LEN Q:U[S  S POP=0 D L G LEN:POP,S:S\5*5'=S,S:S>360,S:S<5 S SL=S_U_$P(SL,U,2,99)
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 | SC S SDLOCK=$S('$D(SDLOCK):1,1:SDLOCK+1) G:SDLOCK>9 LOCK
 | 
|---|
| 67 |  L ^SC(SC,"ST",$P(SD,"."),1):5 G:'$T SC
 | 
|---|
| 68 |  S SDLOCK=0,S=^SC(SC,"ST",$P(SD,"."),1)
 | 
|---|
| 69 |  S I=SD#1-SB*100,ST=I#1*SI\.6+($P(I,".")*SI),SS=SL*HSI/60*SDDIF+ST+ST
 | 
|---|
| 70 |  G X:(I<1!'$F(S,"["))&(S'["CAN")
 | 
|---|
| 71 |  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
 | 
|---|
| 72 |  ;
 | 
|---|
| 73 | SP I ST+ST>$L(S),$L(S)<80 S S=S_" " G SP
 | 
|---|
| 74 |  S SDNOT=1   ;SD*5.3*490 naked Do added below
 | 
|---|
| 75 |  F I=ST+ST:SDDIF:SS-SDDIF S ST=$E(S,I+1) S:ST="" ST=" " S Y=$E(STR,$F(STR,ST)-2) G C:S["CAN"!(ST="X"&($D(^SC(+SC,"ST",$P(SD,"."),"CAN")))),X:Y="" S:Y'?1NL&(SM<6) SM=6 S ST=$E(S,I+2,999) D  S:ST="" ST=" " S S=$E(S,1,I)_Y_ST
 | 
|---|
| 76 |  .Q:ST'=""
 | 
|---|
| 77 |  .Q:+SL'>+^SC(SC,"SL")
 | 
|---|
| 78 |  .S ST="   "
 | 
|---|
| 79 |  .Q
 | 
|---|
| 80 |  Q:SDMM  G OK^SDM1A:SM#9=0,^SDM3:$P(SL,U,7)]""&('$D(MXOK))
 | 
|---|
| 81 |  ;
 | 
|---|
| 82 | E G:'$D(^XUSEC("SDOB",DUZ)) NOOB
 | 
|---|
| 83 |  S %=2 W *7,!,$E($T(@SM),5,99),"...OK" D YN^DICN
 | 
|---|
| 84 |  I '% W !,"RESPOND YES OR NO" G E
 | 
|---|
| 85 |  S SM=9 G SC:'(%-1) K SDSDATE G 1
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 | LOCK Q:SDMM  W !,*7,"ANOTHER USER HAS LOCKED THIS DATE - TRY AGAIN LATER" Q
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 | 6 ;;OVERBOOK!
 | 
|---|
| 90 | 7 ;;THAT TIME IS NOT WITHIN SCHEDULED PERIOD!
 | 
|---|
| 91 | C S POP=1 W !,*7,"CAN'T BOOK WITHIN A CANCELLED TIME PERIOD!",!
 | 
|---|
| 92 |  Q:SDMM  K SDSDATE G 1
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 | DAY ;;^SUN^MON^TUES^WEDNES^THURS^FRI^SATUR
 | 
|---|
| 95 |  ;
 | 
|---|
| 96 | DOW S %=$E(X,1,3),Y=$E(X,4,5),Y=Y>2&'(%#4)+$E("144025036146",Y)
 | 
|---|
| 97 |  F %=%:-1:281 S Y=%#4=1+1+Y
 | 
|---|
| 98 |  S Y=$E(X,6,7)+Y#7 Q
 | 
|---|
| 99 |  ;
 | 
|---|
| 100 | X I SDMM S POP=1 Q
 | 
|---|
| 101 |  G:I<1 XW
 | 
|---|
| 102 |  S:Y'?1NL&(SM<6) SM=6
 | 
|---|
| 103 |  G OK^SDM1A:SM#9=0,^SDM3:$P(SL,U,7)]""&('$D(MXOK))
 | 
|---|
| 104 | XW W *7,"  WHEN??" K SDSDATE G 1
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 | AVCHK ;added SD*5.3*490
 | 
|---|
| 107 |  I '$D(VADM) Q:'DFN  S VADM(3)=$P(^DPT(DFN,0),U,3)
 | 
|---|
| 108 |  Q:$P(X,".",1)=$P(VADM(3),U,1)
 | 
|---|
| 109 |  I $P(X,".",1)<$P(VADM(3),U,1) W *7,!!,"That date is prior to the patient's date of birth.",!! S POP=1 K SDSDATE Q
 | 
|---|
| 110 |  Q
 | 
|---|
| 111 |  ;
 | 
|---|
| 112 | AVCHK1 ;added SD*5.3*490
 | 
|---|
| 113 |  S AVDT=0,AVDT=$O(^SC(+SC,"T",AVDT)) Q:'AVDT
 | 
|---|
| 114 |  I $P(X,".",1)<AVDT W *7,!!,"That date is prior to the clinic's availability date.",!! S POP=1 K SDSDATE,AVDT Q
 | 
|---|
| 115 |  Q
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 | NOOB W !,"NO OPEN SLOTS THEN",*7 K SDSDATE G 1
 | 
|---|
| 118 |  ;
 | 
|---|
| 119 | WRT W !,+SL," MINUTE APPOINTMENTS "
 | 
|---|
| 120 |  W $S($P(SL,U,2)["V":"(VARIABLE LENGTH)",1:"") Q
 | 
|---|
| 121 |  ;
 | 
|---|
| 122 | L S SDSL=$S($P(SL,"^",6)]"":60/$P(SL,"^",6),1:"") Q:'SDSL
 | 
|---|
| 123 |  I S\(SDSL)*(SDSL)'=S W *7,!,"Appt. length must = or be a multiple of the increment minutes per hour (",SDSL,")",! S POP=1
 | 
|---|
| 124 |  Q
 | 
|---|
| 125 |  ;
 | 
|---|
| 126 | IN S SDHY=$S($D(Y):Y,1:""),Y=SDINA D DTS^SDUTL S Y1=Y,Y=SDRE
 | 
|---|
| 127 |  D:Y DTS^SDUTL
 | 
|---|
| 128 |  S SDMSG="""*** Note: Clinic is scheduled to be inactivated on "","_""""_Y1_""""_$S(SDRE:",!,?10,"_""" and reactivated on "","_""""_Y_"""",1:""),Y=SDHY K Y1,SDHY
 | 
|---|
| 129 |  Q
 | 
|---|
| 130 |  ;
 | 
|---|
| 131 | SPIN W !,"There are more special instructions. Do you want to display them"
 | 
|---|
| 132 |  S %=2 D YN^DICN
 | 
|---|
| 133 |  I '% W !,"Enter Y to see the remaining special instructions, or N if you don't wish to see them" G SPIN
 | 
|---|
| 134 |  I (%-1) S POP=1 Q
 | 
|---|
| 135 |  W !,^SC(SC,"SI",%I,0),! Q
 | 
|---|
| 136 |  ;
 | 
|---|
| 137 | REDDT() ;Prompt for availability redisplay date
 | 
|---|
| 138 |  N %DT,X,Y
 | 
|---|
| 139 |  S %DT="AEX"
 | 
|---|
| 140 |  S %DT("A")="DATE TO BEGIN THE RE-DISPLAY OF CLINIC AVAILABILITY: "
 | 
|---|
| 141 |  W ! D ^%DT
 | 
|---|
| 142 |  Q Y
 | 
|---|
| 143 | WL(SC) ;Wait List Hook/teh patch 263 ;SD/327 passed 'SC'
 | 
|---|
| 144 |  Q:$G(SC)'>0
 | 
|---|
| 145 |  I '$D(^SC(SC)) Q
 | 
|---|
| 146 |  I $D(SC) S SDWLFLG=0 D
 | 
|---|
| 147 |  .I $D(^SDWL(409.32,"B",+SC)) S SDWLFLG=1
 | 
|---|
| 148 |  .I 'SDWLFLG S SDWLDSS=$P($G(^SC(+SC,0)),U,7) I $D(^SDWL(409.31,"B",SDWLDSS)) S SDWLFLG=2 D
 | 
|---|
| 149 |  ..I SDWLFLG=1 S SDWLSC=$O(^SDWL(409.32,"B",+SC,0)) I $P(^SDWL(409.32,SDWLSC,0),U,4) S SDWLFLG=0
 | 
|---|
| 150 |  .I SDWLFLG=2 S SDWLDS=$O(^SDWL(409.31,"E",DUZ(2),0)) I $D(^SDWL(409.31,SDWLDSS,"I",+SDWLDS,0)),$P(^(0),U,4) S SDWLFLG=0
 | 
|---|
| 151 |  .I SDWLFLG D
 | 
|---|
| 152 |  ..K SDWLSC,SDWLDSS,SDWLDS,SDWLFLG
 | 
|---|
| 153 |  ..S SDWLOPT=1,SDWLERR=0 D OPT^SDWLE D EN^SDWLKIL
 | 
|---|
| 154 |  Q
 | 
|---|