SDES2CRTCLNAVL2B ;ALB/AGW - SDES2 SET CLINIC AVAILABILITY ; JUN 4, 2026
;;5.3;Scheduling;**947**;Aug 13, 1993;Build 3
;;Per VHA Directive 6402, this routine should not be modified
; Reference to DUZ^XUP is supported by IA #7487
;
; *** Continuation of routine SDES2CRTCLNAVAL2 ***
;
Q
;
;
PATTERNLENGTH(ERRORS,AVAILABILITY,CLINICIEN,STARTTIME,INCREMENT) ;
;
N ENDTIME,ENDTIME1,CNT,CNT1,PATTERNLENGTH,I,XX,INCFLAG
S CNT=0,ENDTIME1=0,STARTTIME=STARTTIME*100,INCFLAG=0
F S CNT=$O(AVAILABILITY("TIMESLOT",CNT)) Q:((CNT="")!(CNT]99999)!($D(ERRORS))) D
.S CNT1=0,ENDTIME=0
.F S CNT1=$O(AVAILABILITY("TIMESLOT",CNT,"END DATE TIME",CNT1)) Q:((CNT1="")!(CNT1]99999)!($D(ERRORS))) D
..S ENDTIME1=(($P($G(AVAILABILITY("TIMESLOT",CNT,"END DATE TIME",CNT1)),".",2)))
..Q:(ENDTIME1'?1.4N)
..S XX=$L(ENDTIME1),ENDTIME1=$S(XX=1:ENDTIME1_"000",XX=2:ENDTIME1_"00",XX=3:ENDTIME1_"0",1:ENDTIME1)
..S ENDTIME1=+ENDTIME1
..S:(ENDTIME1>ENDTIME) ENDTIME=ENDTIME1
..Q
.S:INCREMENT'>2 INCREMENT=4,INCFLAG=1
.S PATTERNLENGTH=(INCREMENT*2)*((ENDTIME\100*60)+(ENDTIME#100)-(STARTTIME\100*60)+(STARTTIME#100))/60+(INCREMENT*2)+($S((INCREMENT>2)&('($G(INCFLAG))):2,1:0))
.D:(PATTERNLENGTH>80) ERRLOG^SDES2JSON(.ERRORS,657)
.Q
Q
;
VALIDATEDATETIME(ERRORS,CLINICIEN,AVAILABILITY,NUMBEROFENTRIES) ;
;
N CNT,TIMEZONEOFFSET,TIME,TIMESLOTCNT,INDEFINITE,OPTMSG
I '$D(AVAILABILITY("TIMESLOT",1,"START DATE TIME",1)) D ERRLOG^SDES2JSON(.ERRORS,25) Q
I '$D(AVAILABILITY("TIMESLOT",1,"END DATE TIME",1)) D ERRLOG^SDES2JSON(.ERRORS,26) Q
S TIMESLOTCNT=0
F S TIMESLOTCNT=$O(AVAILABILITY("TIMESLOT",TIMESLOTCNT)) Q:'TIMESLOTCNT!($D(ERRORS)) D
.S CNT=0
.F S CNT=$O(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)) Q:'CNT!($D(ERRORS)) D
..I $G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"NUMBER OF SLOTS",CNT))="@" D Q
...I ($G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT))["T")!($G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT))[".") D
....S OPTMSG="when removing availability."
....D ERRLOG^SDES2JSON(.ERRORS,431,"when removing availability.")
..I $L($P($P($G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)),"T",2),"-",2))!($L($P($P($G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"END DATE TIME",CNT)),"T",2),"-",2))) D ERRLOG^SDES2JSON(.ERRORS,590) Q
..S TIMEZONEOFFSET=$$GETTZOFFSET^SDESUTIL($$ISOTFM^SDAMUTDT($P($G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)),"T")),CLINICIEN)
..S AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)=$G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT))_TIMEZONEOFFSET
..S AVAILABILITY("TIMESLOT",TIMESLOTCNT,"END DATE TIME",CNT)=$G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"END DATE TIME",CNT))_TIMEZONEOFFSET
..D VALISODATERANGE^SDES2VALISODTTM(.ERRORS,$G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)),$G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"END DATE TIME",CNT)),1,CLINICIEN)
..S AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)=$$ISOTFM^SDAMUTDT($G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)),CLINICIEN)
..S AVAILABILITY("TIMESLOT",TIMESLOTCNT,"END DATE TIME",CNT)=$$ISOTFM^SDAMUTDT($G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"END DATE TIME",CNT)),CLINICIEN)
..I AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)=-1 Q
..I AVAILABILITY("TIMESLOT",TIMESLOTCNT,"END DATE TIME",CNT)=-1 Q
..I $P(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT),".",2)=$P(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"END DATE TIME",CNT),".",2) D ERRLOG^SDES2JSON(.ERRORS,52,"End time cannot be equal to start time") Q
..S INDEFINITE=$G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"INDEFINITE",CNT))
..I '$G(INDEFINITE),$$FMDIFF^XLFDT(DT,$G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)))>14 D ERRLOG^SDES2JSON(.ERRORS,655) Q
..I $G(INDEFINITE),$G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT))<DT D ERRLOG^SDES2JSON(.ERRORS,71) Q
..I $$GET1^DIQ(44,CLINICIEN,1914,"I")*100>+$E($P($G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)),".",2)_"0000",1,4) D ERRLOG^SDES2JSON(.ERRORS,581) Q
..I '$$CHECKDURATION^SDES2UTIL1($E($P($G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)),".",2)_"000",1,4),$E($P($G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"END DATE TIME",CNT)),".",2)_"000",1,4),$$GET1^DIQ(44,CLINICIEN,1912,"I")) D Q
... D ERRLOG^SDES2JSON(.ERRORS,582)
..I $$INACTIVE^SDESUTIL(CLINICIEN,$P($G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)),".")) D ERRLOG^SDES2JSON(.ERRORS,583) Q
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HSDES2CRTCLNAVL2B 4542 printed Sep 17, 2026@21:39:49 Page 2
SDES2CRTCLNAVL2B ;ALB/AGW - SDES2 SET CLINIC AVAILABILITY ; JUN 4, 2026
+1 ;;5.3;Scheduling;**947**;Aug 13, 1993;Build 3
+2 ;;Per VHA Directive 6402, this routine should not be modified
+3 ; Reference to DUZ^XUP is supported by IA #7487
+4 ;
+5 ; *** Continuation of routine SDES2CRTCLNAVAL2 ***
+6 ;
+7 QUIT
+8 ;
+9 ;
PATTERNLENGTH(ERRORS,AVAILABILITY,CLINICIEN,STARTTIME,INCREMENT) ;
+1 ;
+2 NEW ENDTIME,ENDTIME1,CNT,CNT1,PATTERNLENGTH,I,XX,INCFLAG
+3 SET CNT=0
SET ENDTIME1=0
SET STARTTIME=STARTTIME*100
SET INCFLAG=0
+4 FOR
SET CNT=$ORDER(AVAILABILITY("TIMESLOT",CNT))
if ((CNT="")!(CNT]99999)!($DATA(ERRORS)))
QUIT
Begin DoDot:1
+5 SET CNT1=0
SET ENDTIME=0
+6 FOR
SET CNT1=$ORDER(AVAILABILITY("TIMESLOT",CNT,"END DATE TIME",CNT1))
if ((CNT1="")!(CNT1]99999)!($DATA(ERRORS)))
QUIT
Begin DoDot:2
+7 SET ENDTIME1=(($PIECE($GET(AVAILABILITY("TIMESLOT",CNT,"END DATE TIME",CNT1)),".",2)))
+8 if (ENDTIME1'?1.4N)
QUIT
+9 SET XX=$LENGTH(ENDTIME1)
SET ENDTIME1=$SELECT(XX=1:ENDTIME1_"000",XX=2:ENDTIME1_"00",XX=3:ENDTIME1_"0",1:ENDTIME1)
+10 SET ENDTIME1=+ENDTIME1
+11 if (ENDTIME1>ENDTIME)
SET ENDTIME=ENDTIME1
+12 QUIT
End DoDot:2
+13 if INCREMENT'>2
SET INCREMENT=4
SET INCFLAG=1
+14 SET PATTERNLENGTH=(INCREMENT*2)*((ENDTIME\100*60)+(ENDTIME#100)-(STARTTIME\100*60)+(STARTTIME#100))/60+(INCREMENT*2)+($SELECT((INCREMENT>2)&('($GET(INCFLAG))):2,1:0))
+15 if (PATTERNLENGTH>80)
DO ERRLOG^SDES2JSON(.ERRORS,657)
+16 QUIT
End DoDot:1
+17 QUIT
+18 ;
VALIDATEDATETIME(ERRORS,CLINICIEN,AVAILABILITY,NUMBEROFENTRIES) ;
+1 ;
+2 NEW CNT,TIMEZONEOFFSET,TIME,TIMESLOTCNT,INDEFINITE,OPTMSG
+3 IF '$DATA(AVAILABILITY("TIMESLOT",1,"START DATE TIME",1))
DO ERRLOG^SDES2JSON(.ERRORS,25)
QUIT
+4 IF '$DATA(AVAILABILITY("TIMESLOT",1,"END DATE TIME",1))
DO ERRLOG^SDES2JSON(.ERRORS,26)
QUIT
+5 SET TIMESLOTCNT=0
+6 FOR
SET TIMESLOTCNT=$ORDER(AVAILABILITY("TIMESLOT",TIMESLOTCNT))
if 'TIMESLOTCNT!($DATA(ERRORS))
QUIT
Begin DoDot:1
+7 SET CNT=0
+8 FOR
SET CNT=$ORDER(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT))
if 'CNT!($DATA(ERRORS))
QUIT
Begin DoDot:2
+9 IF $GET(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"NUMBER OF SLOTS",CNT))="@"
Begin DoDot:3
+10 IF ($GET(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT))["T")!($GET(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT))[".")
Begin DoDot:4
+11 SET OPTMSG="when removing availability."
+12 DO ERRLOG^SDES2JSON(.ERRORS,431,"when removing availability.")
End DoDot:4
End DoDot:3
QUIT
+13 IF $LENGTH($PIECE($PIECE($GET(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)),"T",2),"-",2))!($LENGTH($PIECE($PIECE($GET(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"END DATE TIME",CNT)),"T",2),"-",2)))
DO ERRLOG^SDES2JSON(.ERRORS,590)
QUIT
+14 SET TIMEZONEOFFSET=$$GETTZOFFSET^SDESUTIL($$ISOTFM^SDAMUTDT($PIECE($GET(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)),"T")),CLINICIEN)
+15 SET AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)=$GET(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT))_TIMEZONEOFFSET
+16 SET AVAILABILITY("TIMESLOT",TIMESLOTCNT,"END DATE TIME",CNT)=$GET(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"END DATE TIME",CNT))_TIMEZONEOFFSET
+17 DO VALISODATERANGE^SDES2VALISODTTM(.ERRORS,$GET(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)),$GET(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"END DATE TIME",CNT)),1,CLINICIEN)
+18 SET AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)=$$ISOTFM^SDAMUTDT($GET(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)),CLINICIEN)
+19 SET AVAILABILITY("TIMESLOT",TIMESLOTCNT,"END DATE TIME",CNT)=$$ISOTFM^SDAMUTDT($GET(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"END DATE TIME",CNT)),CLINICIEN)
+20 IF AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)=-1
QUIT
+21 IF AVAILABILITY("TIMESLOT",TIMESLOTCNT,"END DATE TIME",CNT)=-1
QUIT
+22 IF $PIECE(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT),".",2)=$PIECE(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"END DATE TIME",CNT),".",2)
DO ERRLOG^SDES2JSON(.ERRORS,52,"End time cannot be equal to start time")
QUIT
+23 SET INDEFINITE=$GET(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"INDEFINITE",CNT))
+24 IF '$GET(INDEFINITE)
IF $$FMDIFF^XLFDT(DT,$GET(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)))>14
DO ERRLOG^SDES2JSON(.ERRORS,655)
QUIT
+25 IF $GET(INDEFINITE)
IF $GET(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT))<DT
DO ERRLOG^SDES2JSON(.ERRORS,71)
QUIT
+26 IF $$GET1^DIQ(44,CLINICIEN,1914,"I")*100>+$EXTRACT($PIECE($GET(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)),".",2)_"0000",1,4)
DO ERRLOG^SDES2JSON(.ERRORS,581)
QUIT
+27 IF '$$CHECKDURATION^SDES2UTIL1($EXTRACT($PIECE($GET(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)),".",2)_"000",1,4),...
... $EXTRACT($PIECE($GET(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"END DATE TIME",CNT)),".",2)_"000",1,4),$$GET1^DIQ(44,CLINICIEN,1912,"I"))
Begin DoDot:3
+28 DO ERRLOG^SDES2JSON(.ERRORS,582)
End DoDot:3
QUIT
+29 IF $$INACTIVE^SDESUTIL(CLINICIEN,$PIECE($GET(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)),"."))
DO ERRLOG^SDES2JSON(.ERRORS,583)
QUIT
End DoDot:2
End DoDot:1
+30 QUIT