Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: SDES2CRTCLNAVAL2

SDES2CRTCLNAVAL2.m

Go to the documentation of this file.
SDES2CRTCLNAVAL2 ;ALB/BLB,JDJ/BLB,JDJ,AGW,JDJ,AGW,AGW - SDES2 SET CLINIC AVAILABILITY ;MAY 21, 2026
 ;;5.3;Scheduling;**904,914,919,920,922,909,941,944,945**;Aug 13, 1993;Build 2
 ;;Per VHA Directive 6402, this routine should not be modified
 ; Reference to DUZ^XUP is supported by IA #7487
 ;
 Q
 ;
CREATE(JSON,SDCONTEXT,AVAILABILITY) ;
 N ERRORS,RETURNAVAIL,CLINICIEN,CLINICSTARTHOUR,NUMBEROFENTRIES,INPUTS,INDEFINITEUNTIL,SDDISPPERHR,SDCLINSTARTHR,SLOTSTOCANCEL,%,%DT
 N DIIX,X
 ;
 M INPUTS=AVAILABILITY
 D VALCONTEXT^SDES2VALCONTEXT(.ERRORS,.SDCONTEXT)
 I $D(ERRORS) S ERRORS("clinicAvailability")="" K CNT,I D BUILDJSON^SDES2JSON(.JSON,.ERRORS) Q
 I $G(SDCONTEXT("USER DUZ"))'="" N DUZ D DUZ^XUP(SDCONTEXT("USER DUZ"))
 D VALIDATE(.ERRORS,.AVAILABILITY,.CLINICIEN,.CLINICSTARTHOUR,.NUMBEROFENTRIES,.INPUTS)
 I $D(ERRORS) S ERRORS("clinicAvailability")="" K CNT,I D BUILDJSON^SDES2JSON(.JSON,.ERRORS) Q
 ;
 D CREATEAVAIL(.AVAILABILITY,.SDCONTEXT,.SLOTSTOCANCEL,CLINICIEN,CLINICSTARTHOUR,$$GET1^DIQ(44,CLINICIEN,1917,"I"),$$GET1^DIQ(44,CLINICIEN,1914,"I"),NUMBEROFENTRIES,.INPUTS,.INDEFINITEUNTIL,.RETURNAVAIL,.ERRORS)
 ;
 I $L($G(SLOTSTOCANCEL("CancelledSlots",1,"BeginTime"))),$G(AVAILABILITY("KEEP CANCELLED SLOTS"))=1 D
 .D RECANCELSLOTS(.SLOTSTOCANCEL,CLINICIEN,.SDCONTEXT) K SLOTSTOCANCEL
 ;
 I '$D(RETURNAVAIL) S RETURNAVAIL("clinicAvailability")=""
 D BUILDJSON^SDES2JSON(.JSON,.RETURNAVAIL)
 K CNT,I
 Q
 ;
CREATEAVAIL(AVAILABILITY,SDCONTEXT,SLOTSTOCANCEL,CLINICIEN,CLINICSTARTHOUR,SDDISPPERHR,SDCLINSTARTHR,NUMBEROFENTRIES,INPUTS,INDEFINITEUNTIL,RETURNAVAIL,ERRORS) ;
 N TIMESLOTCNT,CNT,ENDDATE,DATES,TIMES,NUMBEROFSLOTS,SCHEDULEDDAYS,DATENEXTTIMESLOT,CANSLOTSENDDATE,DONE,SDRETURN,SDONE,J,SDSAV,SDST1,SM,SS,SEQ,%H,ENDATE,SB
 ;
 S TIMESLOTCNT=0,DONE=0
 F  S TIMESLOTCNT=$O(AVAILABILITY("TIMESLOT",TIMESLOTCNT)) Q:'TIMESLOTCNT!(DONE=1)  D
 .;
 .S CNT=0
 .F  S CNT=$O(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)) Q:'CNT  D
 ..I $G(SCHEDULEDDAYS)[$P($G(INPUTS("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)),"T") Q
 ..;
 ..D CREATEDATESTIMES(.DATES,.TIMES,.NUMBEROFSLOTS,.INPUTS,$P($G(INPUTS("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)),"T"),NUMBEROFENTRIES,.SLOTSTOCANCEL)
 ..I $D(SLOTSTOCANCEL("Error")) M RETURNAVAIL=SLOTSTOCANCEL S DONE=1 Q
 ..;
 ..D CREATEAVAIL^SDES2UTIL1(.SDRETURN,CLINICIEN,$G(DATES),$G(TIMES),$G(NUMBEROFSLOTS),.INDEFINITEUNTIL)
 ..K DATES,TIMES,NUMBEROFSLOTS
 ..;
 ..S RETURNAVAIL("clinicAvailability",CNT,"Pattern")="Pattern Filed"
 ..I $G(INDEFINITEUNTIL) D
 ...S RETURNAVAIL("clinicAvailability",CNT,"DateIndefiniteScheduleEnds")=INDEFINITEUNTIL K INDEFINITEUNTIL
 ..S SCHEDULEDDAYS=$G(SCHEDULEDDAYS)_$P($G(INPUTS("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)),"T")_U
 Q
 ;
CREATEDATESTIMES(DATES,TIMES,NUMBEROFSLOTS,INPUTS,AVAILABILITYDATE,NUMBEROFENTRIES,SLOTSTOCANCEL) ;
 N TIMESLOTCNT,CNT,SUBSCRIPT,STARTDATE,STARTTIME,ENDTIME,LASTTIMESLOTDATE,DONE,CANSLOTSENDDATE,DATENEXTTIMESLOT,TIME
 ;
 S TIMESLOTCNT=0,DONE=0
 F  S TIMESLOTCNT=$O(INPUTS("TIMESLOT",TIMESLOTCNT)) Q:'TIMESLOTCNT!(DONE=1)  D
 .S CNT=0
 .F  S CNT=$O(INPUTS("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)) Q:'CNT  D
 ..I $P($G(INPUTS("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)),"T")'=AVAILABILITYDATE Q
 ..;
 ..I $G(INPUTS("TIMESLOT",TIMESLOTCNT,"NUMBER OF SLOTS",CNT))="@" D  Q
 ...S DATES=$G(INPUTS("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT))_$S($G(INPUTS("TIMESLOT",TIMESLOTCNT,"INDEFINITE",CNT)):";9999999",1:"")
 ...S NUMBEROFSLOTS=""
 ..S LASTTIMESLOTDATE=0,LASTTIMESLOTDATE=$O(DATES(LASTTIMESLOTDATE))
 ..I $G(LASTTIMESLOTDATE)=$$ISOTFM^SDAMUTDT($P($G(INPUTS("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)),"T"))!('$G(LASTTIMESLOTDATE)) D
 ...S DATES=$$ISOTFM^SDAMUTDT($P($G(INPUTS("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)),"T"))
 ...S TIMES=$G(TIMES)_$P($G(INPUTS("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)),"T",2)_"-"_$P($G(INPUTS("TIMESLOT",TIMESLOTCNT,"END DATE TIME",CNT)),"T",2)_";"
 ...S NUMBEROFSLOTS=$G(NUMBEROFSLOTS)_$G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"NUMBER OF SLOTS",CNT))_";"
 ..I $G(INPUTS("TIMESLOT",TIMESLOTCNT,"INDEFINITE",CNT)),'$D(DATES(9999999)) D
 ...S DATES=$G(DATES)_";9999999"
 ..S DATENEXTTIMESLOT=$$ISOTFM^SDAMUTDT($P($G(INPUTS("TIMESLOT",TIMESLOTCNT,"START DATE TIME",CNT)),"T"))
 ..S CANSLOTSENDDATE=$S($G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"INDEFINITE",CNT)):$$FMTISO^SDAMUTDT($$GETLASTINDEFDATE(CLINICIEN,DATENEXTTIMESLOT,$$GET1^DIQ(44,CLINICIEN,2002))),1:DATENEXTTIMESLOT)
 ..I $G(INPUTS("TIMESLOT",TIMESLOTCNT,"INDEFINITE",CNT)) D  Q
 ...S DONE=0
 ...F  D  Q:DATENEXTTIMESLOT=$$ISOTFM^SDAMUTDT(CANSLOTSENDDATE)
 ....D GETCANSLOTS(CLINICIEN,.SLOTSTOCANCEL,$G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"INDEFINITE",CNT)),CANSLOTSENDDATE,CNT,$$FMTISO^SDAMUTDT(DATENEXTTIMESLOT),.INPUTS,.SDCONTEXT)
 ....S DATENEXTTIMESLOT=$$FMADD^XLFDT(DATENEXTTIMESLOT,7)
 ..;
 ..D GETCANSLOTS(CLINICIEN,.SLOTSTOCANCEL,$G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"INDEFINITE",CNT)),CANSLOTSENDDATE,CNT,$$FMTISO^SDAMUTDT(DATENEXTTIMESLOT),.INPUTS,.SDCONTEXT)
 S TIMES=$E($G(TIMES),1,$L($G(TIMES))-1)
 I $G(NUMBEROFSLOTS)'="" D
 .S NUMBEROFSLOTS=$E($G(NUMBEROFSLOTS),1,$L($G(NUMBEROFSLOTS))-1)
 Q
 ;
GETLASTINDEFDATE(CLINICIEN,DATE,MAXBOOKINGDAYS) ;
 N FOUND,OSTDATE
 ;
 S OSTDATE=DATE,FOUND=0
 F  D  Q:FOUND!(OSTDATE>$$FMADD^XLFDT(DT,MAXBOOKINGDAYS))
 .S OSTDATE=$$FMADD^XLFDT(OSTDATE,7)
 .I $D(^SC(CLINICIEN,"OST",OSTDATE)) S FOUND=1
 Q $G(OSTDATE)
 ;
RECANCELSLOTS(SLOTSTOCANCEL,CLINICIEN,SDCONTEXT) ;
 N CNT,CANCEL,CANCELRETURN
 ;
 S CNT=0
 F  S CNT=$O(SLOTSTOCANCEL("CancelledSlots",CNT)) Q:'CNT  D
 .S CANCEL("CLINIC IEN")=CLINICIEN
 .S CANCEL("FULL PARTIAL FLAG")=$S($G(SLOTSTOCANCEL("CancelledSlots",CNT,"BeginTime"))["T":"P",1:"F")
 .S CANCEL("START DATE TIME")=$G(SLOTSTOCANCEL("CancelledSlots",CNT,"BeginTime"))
 .S CANCEL("END DATE TIME")=$G(SLOTSTOCANCEL("CancelledSlots",CNT,"EndTime"))
 .D CANCEL^SDES2CANCLNAVAIL(.CANCELRETURN,.SDCONTEXT,.CANCEL)
 Q
 ;
GETCANSLOTS(CLINICIEN,SLOTSTOCANCEL,INDEFINITE,ENDDATE,CNT,SCHEDULEDATE,INPUTS,SDCONTEXT) ;
 N CANSLOTS,JSON,SLOTS,NUM,SLOTNUM
 ;
 I $$GET1^DIQ(44.005,$$ISOTFM^SDAMUTDT(SCHEDULEDATE)_","_CLINICIEN_",",1,"I")["CANCELLED" D
 .S NUM=(+($O(SLOTSTOCANCEL("CancelledSlots",""),-1))+1)
 .S SLOTSTOCANCEL("CancelledSlots",NUM,"BeginTime")=SCHEDULEDATE
 .S SLOTSTOCANCEL("CancelledSlots",NUM,"EndTime")=SCHEDULEDATE
 ;
 S CANSLOTS("CLINICIEN")=CLINICIEN
 S CANSLOTS("SDESSTART")=SCHEDULEDATE_"T"_"0001"_$$GETTZOFFSET^SDESUTIL($$ISOTFM^SDAMUTDT(SCHEDULEDATE),CLINICIEN)
 S CANSLOTS("SDESENDDATE")=SCHEDULEDATE_"T"_2359_$$GETTZOFFSET^SDESUTIL($$ISOTFM^SDAMUTDT(SCHEDULEDATE),CLINICIEN)
 D GETCANCSLOTS^SDES2GETCANSLOTS(.JSON,.SDCONTEXT,.CANSLOTS) K CANSLOTS
 D DECODE^XLFJSON("JSON","SLOTS")
 ;
 I $D(SLOTSTOCANCEL("CancelledSlots",1,"BeginTime")),$L($G(SLOTS("CancelledSlots",1,"BeginTime"))) D  Q
 .S NUM="",NUM=$O(SLOTSTOCANCEL("CancelledSlots",NUM),-1)
 .S SLOTNUM=0
 .F  S SLOTNUM=$O(SLOTS("CancelledSlots",SLOTNUM)) Q:'SLOTNUM  D
 ..S NUM=NUM+1
 ..S SLOTSTOCANCEL("CancelledSlots",NUM,"BeginTime")=$G(SLOTS("CancelledSlots",SLOTNUM,"BeginTime"))
 ..S SLOTSTOCANCEL("CancelledSlots",NUM,"EndTime")=$G(SLOTS("CancelledSlots",SLOTNUM,"EndTime"))
 ;
 I $D(SLOTS("CancelledSlots",1,"BeginTime")) D
 .M SLOTSTOCANCEL=SLOTS
 ;
 S SCHEDULEDATE=$$FMADD^XLFDT(SCHEDULEDATE,7) K SLOTS
 Q
 ;
VALIDATE(ERRORS,AVAILABILITY,CLINICIEN,CLINICSTARTHOUR,NUMBEROFENTRIES,INPUTS) ;
 N FDATA,VAL,TIMESLOTCNT,DATETIMECNT
 ;
 D VALFILEIEN^SDES2VALUTIL(.VAL,.ERRORS,44,$G(AVAILABILITY("CLINIC IEN")),1,,18,19)
 I $D(ERRORS) Q
 ;
 S CLINICIEN=$G(AVAILABILITY("CLINIC IEN"))
 S CLINICSTARTHOUR=$$GET1^DIQ(44,CLINICIEN,1914,"I")
 ;
 S NUMBEROFENTRIES=$O(AVAILABILITY("TIMESLOT",""),-1)
 ;
 S TIMESLOTCNT=0
 F  S TIMESLOTCNT=$O(AVAILABILITY("TIMESLOT",TIMESLOTCNT)) Q:'TIMESLOTCNT  D
 .S DATETIMECNT=0
 .F  S DATETIMECNT=$O(INPUTS("TIMESLOT",TIMESLOTCNT,"START DATE TIME",DATETIMECNT)) Q:'DATETIMECNT  D
 ..S INPUTS("TIMESLOT",TIMESLOTCNT,"START DATE TIME",DATETIMECNT)=$TR($G(INPUTS("TIMESLOT",TIMESLOTCNT,"START DATE TIME",DATETIMECNT)),":","")
 ..S INPUTS("TIMESLOT",TIMESLOTCNT,"END DATE TIME",DATETIMECNT)=$TR($G(INPUTS("TIMESLOT",TIMESLOTCNT,"END DATE TIME",DATETIMECNT)),":","")
 ;
 I $L($G(AVAILABILITY("KEEP CANCELLED SLOTS"))) D
 .I $G(AVAILABILITY("KEEP CANCELLED SLOTS"))'=1,$G(AVAILABILITY("KEEP CANCELLED SLOTS"))'=0 D ERRLOG^SDES2JSON(.ERRORS,656)
 ;
 D VALFILEIEN^SDES2VALUTIL(.VAL,.ERRORS,44,CLINICIEN,1,,18,19)
 D VALAPPTLENGTH(.ERRORS,$$GET1^DIQ(44,CLINICIEN,1912,"I"),CLINICIEN) Q:$D(ERRORS)
 D VALSTARTHOUR^SDES2VAL44(.ERRORS,.CLINICSTARTHOUR)
 D VALIDATEDATETIME(.ERRORS,CLINICIEN,.AVAILABILITY,NUMBEROFENTRIES)
 D VALIDATESLOTS(.ERRORS,.AVAILABILITY)
 D VALIDATEINDEF(.ERRORS,.AVAILABILITY)
 D PATTERNLENGTH(.ERRORS,.AVAILABILITY,CLINICIEN,CLINICSTARTHOUR,$$GET1^DIQ(44,CLINICIEN,1917,"I"))
 Q
 ;
VALIDATEINDEF(ERRORS,AVAILABILITY) ;
 N TIMESLOTCNT,CNT
 ;
 I '$D(AVAILABILITY("TIMESLOT",1,"INDEFINITE",1)) D ERRLOG^SDES2JSON(.ERRORS,592) 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
 ..I $G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"INDEFINITE",CNT))="" D ERRLOG^SDES2JSON(.ERRORS,592) Q
 ..I '$D(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"INDEFINITE",CNT)) D ERRLOG^SDES2JSON(.ERRORS,592) Q
 ..I $G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"INDEFINITE",CNT))'=1,$G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"INDEFINITE",CNT))'=0 D ERRLOG^SDES2JSON(.ERRORS,591) Q
 Q
 ;
VALAPPTLENGTH(ERRORS,LENGTH,CLINICIEN) ;
 I LENGTH="" D ERRLOG^SDES2JSON(.ERRORS,115) Q
 I ((LENGTH<10)!(LENGTH>240)) D ERRLOG^SDES2JSON(.ERRORS,116) Q
 I (LENGTH#10'=0),(LENGTH#15'=0) D ERRLOG^SDES2JSON(.ERRORS,116) Q
 Q
 ;
VALIDATESLOTS(ERRORS,AVAILABILITY) ;
 ;
 N TIMESLOTCNT,CNT,ISEMDEPT
 S ISEMDEPT=0
 I $$GET1^DIQ(40.7,$$GET1^DIQ(44,CLINICIEN,8,"I"),1,"I")="130" S ISEMDEPT=1
 I '$D(AVAILABILITY("TIMESLOT",1,"NUMBER OF SLOTS",1)) D ERRLOG^SDES2JSON(.ERRORS,309) 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
 ..I $G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"NUMBER OF SLOTS",CNT))="@" Q
 ..I '$D(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"NUMBER OF SLOTS",CNT)) D ERRLOG^SDES2JSON(.ERRORS,309) Q
 ..I $G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"NUMBER OF SLOTS",CNT))=0,ISEMDEPT=1 Q
 ..I $G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"NUMBER OF SLOTS",CNT))<1!($G(AVAILABILITY("TIMESLOT",TIMESLOTCNT,"NUMBER OF SLOTS",CNT))>26) D ERRLOG^SDES2JSON(.ERRORS,125)
 Q
 ;
VALIDATEDATETIME(ERRORS,CLINICIEN,AVAILABILITY,NUMBEROFENTRIES) ;
 ;
 N CNT,TIMEZONEOFFSET,TIME,TIMESLOTCNT,INDEFINITE
 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))="@" Q
 ..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
 ;
PATTERNLENGTH(ERRORS,AVAILABILTY,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