SDES2CRTCLNAVAL2 ;ALB/BLB,JDJ/BLB - SDES2 SET CLINIC AVAILABILITY ;JUN 06, 2025
;;5.3;Scheduling;**904,914**;Aug 13, 1993;Build 1
;;Per VHA Directive 6402, this routine should not be modified
;
Q
;
CREATE(JSON,SDCONTEXT,AVAILABILITY) ;
N ERRORS,RETURNAVAIL,CLINICIEN,CLINICSTARTHOUR,NUMBEROFENTRIES,INPUTS,INDEFINITEUNTIL,SDDISPPERHR,SDCLINSTARTHR,SLOTSTOCANCEL,%,%DT
;
M INPUTS=AVAILABILITY
D VALIDATE(.ERRORS,.AVAILABILITY,.CLINICIEN,.CLINICSTARTHOUR,.NUMBEROFENTRIES,.INPUTS)
I $D(ERRORS) S ERRORS("clinicAvailability")="" K COUNT,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"))) D
.D RECANCELSLOTS(.SLOTSTOCANCEL,CLINICIEN,.SDCONTEXT) K SLOTSTOCANCEL
;
I '$D(RETURNAVAIL) S RETURNAVAIL("clinicAvailability")=""
D BUILDJSON^SDES2JSON(.JSON,.RETURNAVAIL)
K COUNT,I
Q
;
CREATEAVAIL(AVAILABILITY,SDCONTEXT,SLOTSTOCANCEL,CLINICIEN,CLINICSTARTHOUR,SDDISPPERHR,SDCLINSTARTHR,NUMBEROFENTRIES,INPUTS,INDEFINITEUNTIL,RETURNAVAIL,ERRORS) ;
N TIMESLOTCOUNT,COUNT,ENDDATE,DATES,TIMES,SCHEDULEDDAYS,DATENEXTTIMESLOT,CANSLOTSENDDATE,DONE,SDRETURN,SDONE,J,SDSAV,SDST1,SM,SS,SEQ,%H,ENDATE,SB
;
S TIMESLOTCOUNT=0,DONE=0
F S TIMESLOTCOUNT=$O(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT)) Q:'TIMESLOTCOUNT!(DONE=1) D
.;
.S COUNT=0
.F S COUNT=$O(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)) Q:'COUNT D
..I $G(SCHEDULEDDAYS)[$P($G(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T") Q
..;
..D CREATEDATESTIMES(.DATES,.TIMES,.INPUTS,$P($G(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T"),NUMBEROFENTRIES,.SLOTSTOCANCEL)
..I $D(SLOTSTOCANCEL("Error")) M RETURNAVAIL=SLOTSTOCANCEL S DONE=1 Q
..D CREATE^SDES2UTIL1(CLINICIEN,CLINICSTARTHOUR,$$GET1^DIQ(44,CLINICIEN,1912,"I"),$$DOW^XLFDT($P($G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"."),1),.INDEFINITEUNTIL,.DATES,.TIMES,SDDISPPERHR,.SDRETURN,.ERRORS)
..K DATES,TIMES
..;
..S RETURNAVAIL("clinicAvailability",COUNT,"Pattern")="Pattern Filed"
..I $G(INDEFINITEUNTIL) D
...S RETURNAVAIL("clinicAvailability",COUNT,"DateIndefiniteScheduleEnds")=INDEFINITEUNTIL K INDEFINITEUNTIL
..S SCHEDULEDDAYS=$G(SCHEDULEDDAYS)_$P($G(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T")_U
Q
;
CREATEDATESTIMES(DATES,TIMES,INPUTS,AVAILABILITYDATE,NUMBEROFENTRIES,SLOTSTOCANCEL) ;
N TIMESLOTCOUNT,COUNT,SUBSCRIPT,STARTDATE,STARTTIME,ENDTIME,SLOTS,LASTTIMESLOTDATE,DONE,CANSLOTSENDDATE,DATENEXTTIMESLOT,TIME
;
S TIMESLOTCOUNT=0,DONE=0
F S TIMESLOTCOUNT=$O(INPUTS("TIMESLOT",TIMESLOTCOUNT)) Q:'TIMESLOTCOUNT!(DONE=1) D
.;
.S COUNT=0
.F S COUNT=$O(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)) Q:'COUNT D
..I $P($G(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T")'=AVAILABILITYDATE Q
..;
..I $G(INPUTS("TIMESLOT",TIMESLOTCOUNT,"NUMBER OF SLOTS",COUNT))="@" D Q
...S DATES=$G(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),DATES($$ISOTFM^SDAMUTDT(DATES))="",TIMES=""
..;
..S LASTTIMESLOTDATE=0,LASTTIMESLOTDATE=$O(DATES(LASTTIMESLOTDATE))
..I $G(LASTTIMESLOTDATE)=$$ISOTFM^SDAMUTDT($P($G(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T"))!('$G(LASTTIMESLOTDATE)) D
...S DATES=$$ISOTFM^SDAMUTDT($P($G(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T")),DATES(DATES)=""
...S TIMES=$G(TIMES)_$P($G(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T",2)_"-"_$P($G(INPUTS("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",COUNT)),"T",2)_";"
...S TIME=$P($G(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T",2)_"-"_$P($G(INPUTS("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",COUNT)),"T",2)_U_$G(INPUTS("TIMESLOT",TIMESLOTCOUNT,"NUMBER OF SLOTS",COUNT))
...S TIMES($P($G(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T",2))=TIME
..;
..I $G(INPUTS("TIMESLOT",TIMESLOTCOUNT,"INDEFINITE",COUNT)),'$D(DATES(9999999)) D
...S DATES=$G(DATES)_";9999999",DATES(9999999)=""
..;
..S DATENEXTTIMESLOT=$$ISOTFM^SDAMUTDT($P($G(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T"))
..S CANSLOTSENDDATE=$S($G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"INDEFINITE",COUNT)):$$FMTISO^SDAMUTDT($$GETLASTINDEFDATE(CLINICIEN,DATENEXTTIMESLOT,$$GET1^DIQ(44,CLINICIEN,2002))),1:DATENEXTTIMESLOT)
..I $G(INPUTS("TIMESLOT",TIMESLOTCOUNT,"INDEFINITE",COUNT)) D Q
...S DONE=0
...F D Q:DATENEXTTIMESLOT=$$ISOTFM^SDAMUTDT(CANSLOTSENDDATE)
....D GETCANSLOTS(CLINICIEN,.SLOTSTOCANCEL,$G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"INDEFINITE",COUNT)),CANSLOTSENDDATE,COUNT,$$FMTISO^SDAMUTDT(DATENEXTTIMESLOT),.INPUTS,.SDCONTEXT)
....S DATENEXTTIMESLOT=$$FMADD^XLFDT(DATENEXTTIMESLOT,7)
..;
..D GETCANSLOTS(CLINICIEN,.SLOTSTOCANCEL,$G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"INDEFINITE",COUNT)),CANSLOTSENDDATE,COUNT,$$FMTISO^SDAMUTDT(DATENEXTTIMESLOT),.INPUTS,.SDCONTEXT)
S TIMES=$E($G(TIMES),1,$L($G(TIMES))-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 COUNT,CANCEL,CANCELRETURN
;
S COUNT=0
F S COUNT=$O(SLOTSTOCANCEL("CancelledSlots",COUNT)) Q:'COUNT D
.S CANCEL("CLINIC IEN")=CLINICIEN
.S CANCEL("FULL PARTIAL FLAG")=$S($G(SLOTSTOCANCEL("CancelledSlots",COUNT,"BeginTime"))["T":"P",1:"F")
.S CANCEL("START DATE TIME")=$G(SLOTSTOCANCEL("CancelledSlots",COUNT,"BeginTime"))
.S CANCEL("END DATE TIME")=$G(SLOTSTOCANCEL("CancelledSlots",COUNT,"EndTime"))
.D CANCEL^SDES2CANCLNAVAIL(.CANCELRETURN,.SDCONTEXT,.CANCEL)
Q
;
GETCANSLOTS(CLINICIEN,SLOTSTOCANCEL,INDEFINITE,ENDDATE,COUNT,SCHEDULEDATE,INPUTS,SDCONTEXT) ;
N CANSLOTS,JSON,SLOTS,NUM,SLOTNUM
;
I $$GET1^DIQ(44.005,$$ISOTFM^SDAMUTDT(SCHEDULEDATE)_","_CLINICIEN_",",1,"I")["CANCELLED" D Q
.S SLOTSTOCANCEL("CancelledSlots",1,"BeginTime")=SCHEDULEDATE
.S SLOTSTOCANCEL("CancelledSlots",1,"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,TIMESLOTCOUNT,DATETIMECOUNT
;
D VALCONTEXT^SDES2VALCONTEXT(.ERRORS,.SDCONTEXT)
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 TIMESLOTCOUNT=0
F S TIMESLOTCOUNT=$O(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT)) Q:'TIMESLOTCOUNT D
.S DATETIMECOUNT=0
.F S DATETIMECOUNT=$O(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",DATETIMECOUNT)) Q:'DATETIMECOUNT D
..S INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",DATETIMECOUNT)=$TR($G(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",DATETIMECOUNT)),":","")
..S INPUTS("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",DATETIMECOUNT)=$TR($G(INPUTS("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",DATETIMECOUNT)),":","")
;
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 VALPATTERNS(CLINICIEN,.AVAILABILITY,.INPUTS,CLINICSTARTHOUR,NUMBEROFENTRIES)
Q
;
VALIDATEINDEF(ERRORS,AVAILABILITY) ;
N TIMESLOTCOUNT,COUNT
;
I '$D(AVAILABILITY("TIMESLOT",1,"INDEFINITE",1)) D ERRLOG^SDES2JSON(.ERRORS,592) Q
S TIMESLOTCOUNT=0
F S TIMESLOTCOUNT=$O(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT)) Q:'TIMESLOTCOUNT!($D(ERRORS)) D
.;
.S COUNT=0
.F S COUNT=$O(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)) Q:'COUNT D
..I $G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"INDEFINITE",COUNT))="" D ERRLOG^SDES2JSON(.ERRORS,592) Q
..I '$D(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"INDEFINITE",COUNT)) D ERRLOG^SDES2JSON(.ERRORS,592) Q
..I $G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"INDEFINITE",COUNT))'=1,$G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"INDEFINITE",COUNT))'=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 TIMESLOTCOUNT,COUNT
;
I '$D(AVAILABILITY("TIMESLOT",1,"NUMBER OF SLOTS",1)) D ERRLOG^SDES2JSON(.ERRORS,309) Q
S TIMESLOTCOUNT=0
F S TIMESLOTCOUNT=$O(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT)) Q:'TIMESLOTCOUNT!($D(ERRORS)) D
.;
.S COUNT=0
.F S COUNT=$O(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)) Q:'COUNT D
..I $G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"NUMBER OF SLOTS",COUNT))="@" Q
..I '$D(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"NUMBER OF SLOTS",COUNT)) D ERRLOG^SDES2JSON(.ERRORS,309) Q
..I $G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"NUMBER OF SLOTS",COUNT))<1!($G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"NUMBER OF SLOTS",COUNT))>26) D ERRLOG^SDES2JSON(.ERRORS,125)
Q
;
VALIDATEDATETIME(ERRORS,CLINICIEN,AVAILABILITY,NUMBEROFENTRIES) ;
N COUNT,TIMEZONEOFFSET,TIME,TIMESLOTCOUNT,COUNT
;
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 TIMESLOTCOUNT=0
F S TIMESLOTCOUNT=$O(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT)) Q:'TIMESLOTCOUNT!($D(ERRORS)) D
.;
.S COUNT=0
.F S COUNT=$O(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)) Q:'COUNT!($D(ERRORS)) D
..I $G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"NUMBER OF SLOTS",COUNT))="@" Q
..;
..I $L($P($P($G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T",2),"-",2))!($L($P($P($G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",COUNT)),"T",2),"-",2))) D ERRLOG^SDES2JSON(.ERRORS,590) Q
..S TIMEZONEOFFSET=$$GETTZOFFSET^SDESUTIL($$ISOTFM^SDAMUTDT($P($G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T")),CLINICIEN)
..S AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)=$G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT))_TIMEZONEOFFSET
..S AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",COUNT)=$G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",COUNT))_TIMEZONEOFFSET
..;
..D VALISODATERANGE^SDES2VALISODTTM(.ERRORS,$G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),$G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",COUNT)),1,CLINICIEN)
..S AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)=$$ISOTFM^SDAMUTDT($G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),CLINICIEN)
..S AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",COUNT)=$$ISOTFM^SDAMUTDT($G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",COUNT)),CLINICIEN)
..I AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)=-1 Q
..I AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",COUNT)=-1 Q
..I $G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT))<DT D ERRLOG^SDES2JSON(.ERRORS,71) Q
..;
..I $$GET1^DIQ(44,CLINICIEN,1914,"I")*100>+$E($P($G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),".",2)_"0000",1,4) D ERRLOG^SDES2JSON(.ERRORS,581) Q
..I '$$CHECKDURATION^SDES2UTIL1($G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),$G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",COUNT)),$$GET1^DIQ(44,CLINICIEN,1912,"I")) D ERRLOG^SDES2JSON(.ERRORS,582) Q
..I $$INACTIVE^SDESUTIL(CLINICIEN,$P($G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),".")) D ERRLOG^SDES2JSON(.ERRORS,583) Q
..I $$GET1^DIQ(44,CLINICIEN,1918.5,"I")'="Y",$D(^HOLIDAY($P($G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"."),0)) D ERRLOG^SDES2JSON(.ERRORS,465) Q
Q
;
VALPATTERNS(CLINIEN,AVAILABILITY,INPUTS,STARTDAY,NUMBEROFENTRIES) ;
N SLT,DOW,DISPINCPERHR,TIMESLOTCOUNT,DATES,TIMES,SLOTSTOCANCEL,DONE,COUNT
S SLT=$$GET1^DIQ(44,CLINIEN,1912,"I")
S DISPINCPERHR=$$GET1^DIQ(44,CLINIEN,1917,"I")
S TIMESLOTCOUNT=0,DONE=0
F S TIMESLOTCOUNT=$O(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT)) Q:'TIMESLOTCOUNT!($D(ERRORS)) D
.;
.S COUNT=0
.F S COUNT=$O(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)) Q:'COUNT!($D(ERRORS)) D
..;
..S DOW=$$DOW^XLFDT($P($G(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"."),1)
..D CREATEDATESTIMES(.DATES,.TIMES,.INPUTS,$P($G(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T"),NUMBEROFENTRIES,.SLOTSTOCANCEL)
..;
..D CHECKLEN^SDES2CRTCLNAVAIL(CLINIEN,STARTDAY,SLT,DOW,,.DATES,.TIMES,DISPINCPERHR,,.ERRORS)
Q
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HSDES2CRTCLNAVAL2 14159 printed Sep 23, 2025@20:30:08 Page 2
SDES2CRTCLNAVAL2 ;ALB/BLB,JDJ/BLB - SDES2 SET CLINIC AVAILABILITY ;JUN 06, 2025
+1 ;;5.3;Scheduling;**904,914**;Aug 13, 1993;Build 1
+2 ;;Per VHA Directive 6402, this routine should not be modified
+3 ;
+4 QUIT
+5 ;
CREATE(JSON,SDCONTEXT,AVAILABILITY) ;
+1 NEW ERRORS,RETURNAVAIL,CLINICIEN,CLINICSTARTHOUR,NUMBEROFENTRIES,INPUTS,INDEFINITEUNTIL,SDDISPPERHR,SDCLINSTARTHR,SLOTSTOCANCEL,%,%DT
+2 ;
+3 MERGE INPUTS=AVAILABILITY
+4 DO VALIDATE(.ERRORS,.AVAILABILITY,.CLINICIEN,.CLINICSTARTHOUR,.NUMBEROFENTRIES,.INPUTS)
+5 IF $DATA(ERRORS)
SET ERRORS("clinicAvailability")=""
KILL COUNT,I
DO BUILDJSON^SDES2JSON(.JSON,.ERRORS)
QUIT
+6 ;
+7 DO CREATEAVAIL(.AVAILABILITY,.SDCONTEXT,.SLOTSTOCANCEL,CLINICIEN,CLINICSTARTHOUR,$$GET1^DIQ(44,CLINICIEN,1917,"I"),$$GET1^DIQ(44,CLINICIEN,1914,"I"),NUMBEROFENTRIES,.INPUTS,.INDEFINITEUNTIL,.RETURNAVAIL,.ERRORS)
+8 ;
+9 IF $LENGTH($GET(SLOTSTOCANCEL("CancelledSlots",1,"BeginTime")))
Begin DoDot:1
+10 DO RECANCELSLOTS(.SLOTSTOCANCEL,CLINICIEN,.SDCONTEXT)
KILL SLOTSTOCANCEL
End DoDot:1
+11 ;
+12 IF '$DATA(RETURNAVAIL)
SET RETURNAVAIL("clinicAvailability")=""
+13 DO BUILDJSON^SDES2JSON(.JSON,.RETURNAVAIL)
+14 KILL COUNT,I
+15 QUIT
+16 ;
CREATEAVAIL(AVAILABILITY,SDCONTEXT,SLOTSTOCANCEL,CLINICIEN,CLINICSTARTHOUR,SDDISPPERHR,SDCLINSTARTHR,NUMBEROFENTRIES,INPUTS,INDEFINITEUNTIL,RETURNAVAIL,ERRORS) ;
+1 NEW TIMESLOTCOUNT,COUNT,ENDDATE,DATES,TIMES,SCHEDULEDDAYS,DATENEXTTIMESLOT,CANSLOTSENDDATE,DONE,SDRETURN,SDONE,J,SDSAV,SDST1,SM,SS,SEQ,%H,ENDATE,SB
+2 ;
+3 SET TIMESLOTCOUNT=0
SET DONE=0
+4 FOR
SET TIMESLOTCOUNT=$ORDER(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT))
if 'TIMESLOTCOUNT!(DONE=1)
QUIT
Begin DoDot:1
+5 ;
+6 SET COUNT=0
+7 FOR
SET COUNT=$ORDER(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT))
if 'COUNT
QUIT
Begin DoDot:2
+8 IF $GET(SCHEDULEDDAYS)[$PIECE($GET(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T")
QUIT
+9 ;
+10 DO CREATEDATESTIMES(.DATES,.TIMES,.INPUTS,$PIECE($GET(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T"),NUMBEROFENTRIES,.SLOTSTOCANCEL)
+11 IF $DATA(SLOTSTOCANCEL("Error"))
MERGE RETURNAVAIL=SLOTSTOCANCEL
SET DONE=1
QUIT
+12 DO CREATE^SDES2UTIL1(CLINICIEN,CLINICSTARTHOUR,$$GET1^DIQ(44,CLINICIEN,1912,"I"),$$DOW^XLFDT($PIECE($GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"."),1),.INDEFINITEUNTIL,.DATES,.TIMES,SDDISPPERHR,.SDRETUR
N,.ERRORS)
+13 KILL DATES,TIMES
+14 ;
+15 SET RETURNAVAIL("clinicAvailability",COUNT,"Pattern")="Pattern Filed"
+16 IF $GET(INDEFINITEUNTIL)
Begin DoDot:3
+17 SET RETURNAVAIL("clinicAvailability",COUNT,"DateIndefiniteScheduleEnds")=INDEFINITEUNTIL
KILL INDEFINITEUNTIL
End DoDot:3
+18 SET SCHEDULEDDAYS=$GET(SCHEDULEDDAYS)_$PIECE($GET(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T")_U
End DoDot:2
End DoDot:1
+19 QUIT
+20 ;
CREATEDATESTIMES(DATES,TIMES,INPUTS,AVAILABILITYDATE,NUMBEROFENTRIES,SLOTSTOCANCEL) ;
+1 NEW TIMESLOTCOUNT,COUNT,SUBSCRIPT,STARTDATE,STARTTIME,ENDTIME,SLOTS,LASTTIMESLOTDATE,DONE,CANSLOTSENDDATE,DATENEXTTIMESLOT,TIME
+2 ;
+3 SET TIMESLOTCOUNT=0
SET DONE=0
+4 FOR
SET TIMESLOTCOUNT=$ORDER(INPUTS("TIMESLOT",TIMESLOTCOUNT))
if 'TIMESLOTCOUNT!(DONE=1)
QUIT
Begin DoDot:1
+5 ;
+6 SET COUNT=0
+7 FOR
SET COUNT=$ORDER(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT))
if 'COUNT
QUIT
Begin DoDot:2
+8 IF $PIECE($GET(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T")'=AVAILABILITYDATE
QUIT
+9 ;
+10 IF $GET(INPUTS("TIMESLOT",TIMESLOTCOUNT,"NUMBER OF SLOTS",COUNT))="@"
Begin DoDot:3
+11 SET DATES=$GET(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT))
SET DATES($$ISOTFM^SDAMUTDT(DATES))=""
SET TIMES=""
End DoDot:3
QUIT
+12 ;
+13 SET LASTTIMESLOTDATE=0
SET LASTTIMESLOTDATE=$ORDER(DATES(LASTTIMESLOTDATE))
+14 IF $GET(LASTTIMESLOTDATE)=$$ISOTFM^SDAMUTDT($PIECE($GET(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T"))!('$GET(LASTTIMESLOTDATE))
Begin DoDot:3
+15 SET DATES=$$ISOTFM^SDAMUTDT($PIECE($GET(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T"))
SET DATES(DATES)=""
+16 SET TIMES=$GET(TIMES)_$PIECE($GET(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T",2)_"-"_$PIECE($GET(INPUTS("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",COUNT)),"T",2)_";"
+17 SET TIME=$PIECE($GET(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T",2)_"-"_$PIECE($GET(INPUTS("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",COUNT)),"T",2)_U_$GET(INPUTS("TIMESLOT",TIMESLOTCOUNT,"NUMBER OF SLOTS
",COUNT))
+18 SET TIMES($PIECE($GET(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T",2))=TIME
End DoDot:3
+19 ;
+20 IF $GET(INPUTS("TIMESLOT",TIMESLOTCOUNT,"INDEFINITE",COUNT))
IF '$DATA(DATES(9999999))
Begin DoDot:3
+21 SET DATES=$GET(DATES)_";9999999"
SET DATES(9999999)=""
End DoDot:3
+22 ;
+23 SET DATENEXTTIMESLOT=$$ISOTFM^SDAMUTDT($PIECE($GET(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T"))
+24 SET CANSLOTSENDDATE=$SELECT($GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"INDEFINITE",COUNT)):$$FMTISO^SDAMUTDT($$GETLASTINDEFDATE(CLINICIEN,DATENEXTTIMESLOT,$$GET1^DIQ(44,CLINICIEN,2002))),1:DATENEXTTIMESLOT)
+25 IF $GET(INPUTS("TIMESLOT",TIMESLOTCOUNT,"INDEFINITE",COUNT))
Begin DoDot:3
+26 SET DONE=0
+27 FOR
Begin DoDot:4
+28 DO GETCANSLOTS(CLINICIEN,.SLOTSTOCANCEL,$GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"INDEFINITE",COUNT)),CANSLOTSENDDATE,COUNT,$$FMTISO^SDAMUTDT(DATENEXTTIMESLOT),.INPUTS,.SDCONTEXT)
+29 SET DATENEXTTIMESLOT=$$FMADD^XLFDT(DATENEXTTIMESLOT,7)
End DoDot:4
if DATENEXTTIMESLOT=$$ISOTFM^SDAMUTDT(CANSLOTSENDDATE)
QUIT
End DoDot:3
QUIT
+30 ;
+31 DO GETCANSLOTS(CLINICIEN,.SLOTSTOCANCEL,$GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"INDEFINITE",COUNT)),CANSLOTSENDDATE,COUNT,$$FMTISO^SDAMUTDT(DATENEXTTIMESLOT),.INPUTS,.SDCONTEXT)
End DoDot:2
End DoDot:1
+32 SET TIMES=$EXTRACT($GET(TIMES),1,$LENGTH($GET(TIMES))-1)
+33 QUIT
+34 ;
GETLASTINDEFDATE(CLINICIEN,DATE,MAXBOOKINGDAYS) ;
+1 NEW FOUND,OSTDATE
+2 ;
+3 SET OSTDATE=DATE
SET FOUND=0
+4 FOR
Begin DoDot:1
+5 SET OSTDATE=$$FMADD^XLFDT(OSTDATE,7)
+6 IF $DATA(^SC(CLINICIEN,"OST",OSTDATE))
SET FOUND=1
End DoDot:1
if FOUND!(OSTDATE>$$FMADD^XLFDT(DT,MAXBOOKINGDAYS))
QUIT
+7 QUIT $GET(OSTDATE)
+8 ;
RECANCELSLOTS(SLOTSTOCANCEL,CLINICIEN,SDCONTEXT) ;
+1 NEW COUNT,CANCEL,CANCELRETURN
+2 ;
+3 SET COUNT=0
+4 FOR
SET COUNT=$ORDER(SLOTSTOCANCEL("CancelledSlots",COUNT))
if 'COUNT
QUIT
Begin DoDot:1
+5 SET CANCEL("CLINIC IEN")=CLINICIEN
+6 SET CANCEL("FULL PARTIAL FLAG")=$SELECT($GET(SLOTSTOCANCEL("CancelledSlots",COUNT,"BeginTime"))["T":"P",1:"F")
+7 SET CANCEL("START DATE TIME")=$GET(SLOTSTOCANCEL("CancelledSlots",COUNT,"BeginTime"))
+8 SET CANCEL("END DATE TIME")=$GET(SLOTSTOCANCEL("CancelledSlots",COUNT,"EndTime"))
+9 DO CANCEL^SDES2CANCLNAVAIL(.CANCELRETURN,.SDCONTEXT,.CANCEL)
End DoDot:1
+10 QUIT
+11 ;
GETCANSLOTS(CLINICIEN,SLOTSTOCANCEL,INDEFINITE,ENDDATE,COUNT,SCHEDULEDATE,INPUTS,SDCONTEXT) ;
+1 NEW CANSLOTS,JSON,SLOTS,NUM,SLOTNUM
+2 ;
+3 IF $$GET1^DIQ(44.005,$$ISOTFM^SDAMUTDT(SCHEDULEDATE)_","_CLINICIEN_",",1,"I")["CANCELLED"
Begin DoDot:1
+4 SET SLOTSTOCANCEL("CancelledSlots",1,"BeginTime")=SCHEDULEDATE
+5 SET SLOTSTOCANCEL("CancelledSlots",1,"EndTime")=SCHEDULEDATE
End DoDot:1
QUIT
+6 ;
+7 SET CANSLOTS("CLINICIEN")=CLINICIEN
+8 SET CANSLOTS("SDESSTART")=SCHEDULEDATE_"T"_"0001"_$$GETTZOFFSET^SDESUTIL($$ISOTFM^SDAMUTDT(SCHEDULEDATE),CLINICIEN)
+9 SET CANSLOTS("SDESENDDATE")=SCHEDULEDATE_"T"_2359_$$GETTZOFFSET^SDESUTIL($$ISOTFM^SDAMUTDT(SCHEDULEDATE),CLINICIEN)
+10 DO GETCANCSLOTS^SDES2GETCANSLOTS(.JSON,.SDCONTEXT,.CANSLOTS)
KILL CANSLOTS
+11 DO DECODE^XLFJSON("JSON","SLOTS")
+12 ;
+13 IF $DATA(SLOTSTOCANCEL("CancelledSlots",1,"BeginTime"))
IF $LENGTH($GET(SLOTS("CancelledSlots",1,"BeginTime")))
Begin DoDot:1
+14 SET NUM=""
SET NUM=$ORDER(SLOTSTOCANCEL("CancelledSlots",NUM),-1)
+15 SET SLOTNUM=0
+16 FOR
SET SLOTNUM=$ORDER(SLOTS("CancelledSlots",SLOTNUM))
if 'SLOTNUM
QUIT
Begin DoDot:2
+17 SET NUM=NUM+1
+18 SET SLOTSTOCANCEL("CancelledSlots",NUM,"BeginTime")=$GET(SLOTS("CancelledSlots",SLOTNUM,"BeginTime"))
+19 SET SLOTSTOCANCEL("CancelledSlots",NUM,"EndTime")=$GET(SLOTS("CancelledSlots",SLOTNUM,"EndTime"))
End DoDot:2
End DoDot:1
QUIT
+20 ;
+21 IF $DATA(SLOTS("CancelledSlots",1,"BeginTime"))
Begin DoDot:1
+22 MERGE SLOTSTOCANCEL=SLOTS
End DoDot:1
+23 ;
+24 SET SCHEDULEDATE=$$FMADD^XLFDT(SCHEDULEDATE,7)
KILL SLOTS
+25 QUIT
+26 ;
VALIDATE(ERRORS,AVAILABILITY,CLINICIEN,CLINICSTARTHOUR,NUMBEROFENTRIES,INPUTS) ;
+1 NEW FDATA,VAL,TIMESLOTCOUNT,DATETIMECOUNT
+2 ;
+3 DO VALCONTEXT^SDES2VALCONTEXT(.ERRORS,.SDCONTEXT)
+4 DO VALFILEIEN^SDES2VALUTIL(.VAL,.ERRORS,44,$GET(AVAILABILITY("CLINIC IEN")),1,,18,19)
+5 IF $DATA(ERRORS)
QUIT
+6 ;
+7 SET CLINICIEN=$GET(AVAILABILITY("CLINIC IEN"))
+8 SET CLINICSTARTHOUR=$$GET1^DIQ(44,CLINICIEN,1914,"I")
+9 ;
+10 SET NUMBEROFENTRIES=$ORDER(AVAILABILITY("TIMESLOT",""),-1)
+11 ;
+12 SET TIMESLOTCOUNT=0
+13 FOR
SET TIMESLOTCOUNT=$ORDER(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT))
if 'TIMESLOTCOUNT
QUIT
Begin DoDot:1
+14 SET DATETIMECOUNT=0
+15 FOR
SET DATETIMECOUNT=$ORDER(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",DATETIMECOUNT))
if 'DATETIMECOUNT
QUIT
Begin DoDot:2
+16 SET INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",DATETIMECOUNT)=$TRANSLATE($GET(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",DATETIMECOUNT)),":","")
+17 SET INPUTS("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",DATETIMECOUNT)=$TRANSLATE($GET(INPUTS("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",DATETIMECOUNT)),":","")
End DoDot:2
End DoDot:1
+18 ;
+19 DO VALFILEIEN^SDES2VALUTIL(.VAL,.ERRORS,44,CLINICIEN,1,,18,19)
+20 DO VALAPPTLENGTH(.ERRORS,$$GET1^DIQ(44,CLINICIEN,1912,"I"),CLINICIEN)
if $DATA(ERRORS)
QUIT
+21 DO VALSTARTHOUR^SDES2VAL44(.ERRORS,.CLINICSTARTHOUR)
+22 DO VALIDATEDATETIME(.ERRORS,CLINICIEN,.AVAILABILITY,NUMBEROFENTRIES)
+23 DO VALIDATESLOTS(.ERRORS,.AVAILABILITY)
+24 DO VALIDATEINDEF(.ERRORS,.AVAILABILITY)
+25 DO VALPATTERNS(CLINICIEN,.AVAILABILITY,.INPUTS,CLINICSTARTHOUR,NUMBEROFENTRIES)
+26 QUIT
+27 ;
VALIDATEINDEF(ERRORS,AVAILABILITY) ;
+1 NEW TIMESLOTCOUNT,COUNT
+2 ;
+3 IF '$DATA(AVAILABILITY("TIMESLOT",1,"INDEFINITE",1))
DO ERRLOG^SDES2JSON(.ERRORS,592)
QUIT
+4 SET TIMESLOTCOUNT=0
+5 FOR
SET TIMESLOTCOUNT=$ORDER(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT))
if 'TIMESLOTCOUNT!($DATA(ERRORS))
QUIT
Begin DoDot:1
+6 ;
+7 SET COUNT=0
+8 FOR
SET COUNT=$ORDER(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT))
if 'COUNT
QUIT
Begin DoDot:2
+9 IF $GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"INDEFINITE",COUNT))=""
DO ERRLOG^SDES2JSON(.ERRORS,592)
QUIT
+10 IF '$DATA(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"INDEFINITE",COUNT))
DO ERRLOG^SDES2JSON(.ERRORS,592)
QUIT
+11 IF $GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"INDEFINITE",COUNT))'=1
IF $GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"INDEFINITE",COUNT))'=0
DO ERRLOG^SDES2JSON(.ERRORS,591)
QUIT
End DoDot:2
End DoDot:1
+12 QUIT
+13 ;
VALAPPTLENGTH(ERRORS,LENGTH,CLINICIEN) ;
+1 IF LENGTH=""
DO ERRLOG^SDES2JSON(.ERRORS,115)
QUIT
+2 IF ((LENGTH<10)!(LENGTH>240))
DO ERRLOG^SDES2JSON(.ERRORS,116)
QUIT
+3 IF (LENGTH#10'=0)
IF (LENGTH#15'=0)
DO ERRLOG^SDES2JSON(.ERRORS,116)
QUIT
+4 QUIT
+5 ;
VALIDATESLOTS(ERRORS,AVAILABILITY) ;
+1 NEW TIMESLOTCOUNT,COUNT
+2 ;
+3 IF '$DATA(AVAILABILITY("TIMESLOT",1,"NUMBER OF SLOTS",1))
DO ERRLOG^SDES2JSON(.ERRORS,309)
QUIT
+4 SET TIMESLOTCOUNT=0
+5 FOR
SET TIMESLOTCOUNT=$ORDER(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT))
if 'TIMESLOTCOUNT!($DATA(ERRORS))
QUIT
Begin DoDot:1
+6 ;
+7 SET COUNT=0
+8 FOR
SET COUNT=$ORDER(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT))
if 'COUNT
QUIT
Begin DoDot:2
+9 IF $GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"NUMBER OF SLOTS",COUNT))="@"
QUIT
+10 IF '$DATA(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"NUMBER OF SLOTS",COUNT))
DO ERRLOG^SDES2JSON(.ERRORS,309)
QUIT
+11 IF $GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"NUMBER OF SLOTS",COUNT))<1!($GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"NUMBER OF SLOTS",COUNT))>26)
DO ERRLOG^SDES2JSON(.ERRORS,125)
End DoDot:2
End DoDot:1
+12 QUIT
+13 ;
VALIDATEDATETIME(ERRORS,CLINICIEN,AVAILABILITY,NUMBEROFENTRIES) ;
+1 NEW COUNT,TIMEZONEOFFSET,TIME,TIMESLOTCOUNT,COUNT
+2 ;
+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 ;
+6 SET TIMESLOTCOUNT=0
+7 FOR
SET TIMESLOTCOUNT=$ORDER(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT))
if 'TIMESLOTCOUNT!($DATA(ERRORS))
QUIT
Begin DoDot:1
+8 ;
+9 SET COUNT=0
+10 FOR
SET COUNT=$ORDER(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT))
if 'COUNT!($DATA(ERRORS))
QUIT
Begin DoDot:2
+11 IF $GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"NUMBER OF SLOTS",COUNT))="@"
QUIT
+12 ;
+13 IF $LENGTH($PIECE($PIECE($GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T",2),"-",2))!($LENGTH($PIECE($PIECE($GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",COUNT)),"T",2),"-",2)))
DO ERRLOG^SDES2JSON(.ERRORS,590)
QUIT
+14 SET TIMEZONEOFFSET=$$GETTZOFFSET^SDESUTIL($$ISOTFM^SDAMUTDT($PIECE($GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T")),CLINICIEN)
+15 SET AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)=$GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT))_TIMEZONEOFFSET
+16 SET AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",COUNT)=$GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",COUNT))_TIMEZONEOFFSET
+17 ;
+18 DO VALISODATERANGE^SDES2VALISODTTM(.ERRORS,$GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),$GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",COUNT)),1,CLINICIEN)
+19 SET AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)=$$ISOTFM^SDAMUTDT($GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),CLINICIEN)
+20 SET AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",COUNT)=$$ISOTFM^SDAMUTDT($GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",COUNT)),CLINICIEN)
+21 IF AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)=-1
QUIT
+22 IF AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",COUNT)=-1
QUIT
+23 IF $GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT))<DT
DO ERRLOG^SDES2JSON(.ERRORS,71)
QUIT
+24 ;
+25 IF $$GET1^DIQ(44,CLINICIEN,1914,"I")*100>+$EXTRACT($PIECE($GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),".",2)_"0000",1,4)
DO ERRLOG^SDES2JSON(.ERRORS,581)
QUIT
+26 IF '$$CHECKDURATION^SDES2UTIL1($GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),$GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"END DATE TIME",COUNT)),$$GET1^DIQ(44,CLINICIEN,1912,"I"))
DO ERRLOG^SDES2JSON(.ERRORS,582)
QUIT
+27 IF $$INACTIVE^SDESUTIL(CLINICIEN,$PIECE($GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"."))
DO ERRLOG^SDES2JSON(.ERRORS,583)
QUIT
+28 IF $$GET1^DIQ(44,CLINICIEN,1918.5,"I")'="Y"
IF $DATA(^HOLIDAY($PIECE($GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"."),0))
DO ERRLOG^SDES2JSON(.ERRORS,465)
QUIT
End DoDot:2
End DoDot:1
+29 QUIT
+30 ;
VALPATTERNS(CLINIEN,AVAILABILITY,INPUTS,STARTDAY,NUMBEROFENTRIES) ;
+1 NEW SLT,DOW,DISPINCPERHR,TIMESLOTCOUNT,DATES,TIMES,SLOTSTOCANCEL,DONE,COUNT
+2 SET SLT=$$GET1^DIQ(44,CLINIEN,1912,"I")
+3 SET DISPINCPERHR=$$GET1^DIQ(44,CLINIEN,1917,"I")
+4 SET TIMESLOTCOUNT=0
SET DONE=0
+5 FOR
SET TIMESLOTCOUNT=$ORDER(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT))
if 'TIMESLOTCOUNT!($DATA(ERRORS))
QUIT
Begin DoDot:1
+6 ;
+7 SET COUNT=0
+8 FOR
SET COUNT=$ORDER(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT))
if 'COUNT!($DATA(ERRORS))
QUIT
Begin DoDot:2
+9 ;
+10 SET DOW=$$DOW^XLFDT($PIECE($GET(AVAILABILITY("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"."),1)
+11 DO CREATEDATESTIMES(.DATES,.TIMES,.INPUTS,$PIECE($GET(INPUTS("TIMESLOT",TIMESLOTCOUNT,"START DATE TIME",COUNT)),"T"),NUMBEROFENTRIES,.SLOTSTOCANCEL)
+12 ;
+13 DO CHECKLEN^SDES2CRTCLNAVAIL(CLINIEN,STARTDAY,SLT,DOW,,.DATES,.TIMES,DISPINCPERHR,,.ERRORS)
End DoDot:2
End DoDot:1
+14 QUIT
+15 ;