SDES2CLONESLOTS ;ALB/BLB - SDES2 SEARCH CLINIC SLOTLENGTHS; Apr 04, 2025@4:17am 1993;Build 8
;;5.3;Scheduling;**904,906**; Aug 3,1993;Build 5
;;Per VHA Directive 6402, this routine should not be modified
;
Q
;
CLONECLINICSLOTS(JSON,SDCONTEXT,CLINIC) ;
N ERRORS,SLOTS,PATTERNCOUNT
;
D VALCONTEXT^SDES2VALCONTEXT(.ERRORS,.SDCONTEXT)
D VALFILEIEN^SDES2VALUTIL(,.ERRORS,44,$G(CLINIC("CLINIC IEN")),1,,18,19)
I $D(ERRORS) S ERRORS("cloneClinicSlots",1)="" D BUILDJSON^SDES2JSON(.JSON,.ERRORS) Q
;
D BUILDINDEFSLOTS(.SLOTS,CLINIC("CLINIC IEN"),.PATTERNCOUNT)
D BUILDSPECSLOTS(.SLOTS,CLINIC("CLINIC IEN"),.PATTERNCOUNT)
;
I '$D(SLOTS) S SLOTS("cloneClinicSlots",1)=""
D BUILDJSON^SDES2JSON(.JSON,.SLOTS)
Q
;
BUILDINDEFSLOTS(SLOTS,CLINICIEN,PATTERNCOUNT) ;
N TNODE,SLOTDATE,STARTDATE,DATE
;
F TNODE=0:1:6 D
.;
.S DATE=99999999
.F S DATE=$O(^SC(CLINICIEN,"T"_TNODE,DATE),-1) Q:'DATE!(DATE<DT) D
..S (SLOTDATE,STARTDATE)=$O(^SC(CLINICIEN,"T"_TNODE,DATE),-1)
..S PATTERNCOUNT=$G(PATTERNCOUNT)+1
..;
..I DATE=9999999 D Q
...I '$G(SLOTDATE) D Q
....S (STARTDATE,SLOTDATE)=$$GETINDEFSLOTDATE(CLINICIEN,DATE,TNODE)
....;
....I STARTDATE<DT D
.....S STARTDATE=$$NEXTWEEKDAY(TNODE)
....;
....D BUILDSLOTS(.SLOTS,CLINICIEN,SLOTDATE,STARTDATE,1,PATTERNCOUNT)
...;
...S STARTDATE=$$NEXTWEEKDAY(TNODE)
...S SLOTDATE=$$GETINDEFSLOTDATE(CLINICIEN,DATE,TNODE)
...D BUILDSLOTS(.SLOTS,CLINICIEN,SLOTDATE,STARTDATE,1,PATTERNCOUNT)
..;
..I DATE=9999999,SLOTDATE>DT D Q
...S (SLOTDATE,STARTDATE)=$$NEXTWEEKDAY(TNODE)
...D BUILDSLOTS(.SLOTS,CLINICIEN,SLOTDATE,STARTDATE,1,PATTERNCOUNT)
..;
..I 'SLOTDATE D
...S (SLOTDATE,STARTDATE)=DATE
..;
..D BUILDSLOTS(.SLOTS,CLINICIEN,SLOTDATE,STARTDATE,1,PATTERNCOUNT)
I $D(SLOTS) S SLOTS("cloneClinicSlots",1,"clinicIen")=CLINICIEN
Q
;
BUILDSPECSLOTS(SLOTS,CLINICIEN,PATTERNCOUNT) ;
N PATTERN,STARTINGSPACES,INCREMENT,OSTDATE
;
S OSTDATE=$$FMADD^XLFDT(DT,-1)
F S OSTDATE=$O(^SC(CLINICIEN,"OST",OSTDATE)) Q:'OSTDATE D
.S PATTERNCOUNT=$G(PATTERNCOUNT)+1
.D BUILDSLOTS(.SLOTS,CLINICIEN,OSTDATE,,0,PATTERNCOUNT)
Q
;
BUILDSLOTS(SLOTS,CLINICIEN,DATE,INDEFSTARTDATE,INDEFINITE,PATTERNCOUNT,RETURNALLSLOTS) ;
N SUBIEN,OPEN,COUNT,STARTDATE,TIME,NEXTTIME,TIMEDIFF,SLOTLENGTH,STARTDATETIME,ENDDATETIME,NUMBEROFSLOTS
;
S SUBIEN=0,COUNT=0,STARTDATE=$S($G(INDEFINITE):$G(INDEFSTARTDATE),1:DATE)
F S SUBIEN=$O(^SC(CLINICIEN,"T",DATE,2,SUBIEN)) Q:'SUBIEN D
.;
.S TIME=$$GET1^DIQ(44.004,SUBIEN_","_DATE_","_CLINICIEN_",",.01,"I")
.S TIME=$S(TIME="0000":"0001",1:TIME)
.S NEXTTIME=$$GET1^DIQ(44.004,SUBIEN+1_","_DATE_","_CLINICIEN_",",.01,"I")
.S NEXTTIME=$S(NEXTTIME="0000":"0001",1:NEXTTIME)
.S TIMEDIFF=$$FMDIFF^XLFDT(STARTDATE_"."_NEXTTIME,STARTDATE_"."_TIME,2)/60
.S SLOTLENGTH=$$GET1^DIQ(44,CLINICIEN,1912)
.S NUMBEROFSLOTS=$$GET1^DIQ(44.004,SUBIEN_","_DATE_","_CLINICIEN_",",1,"I")
.S STARTDATETIME=$TR($E($$FMTISO^SDAMUTDT(STARTDATE_"."_TIME),1,16),":","")
.S ENDDATETIME=$TR($E($$FMTISO^SDAMUTDT($$FMADD^XLFDT(STARTDATE_"."_TIME,,,$$GET1^DIQ(44,CLINICIEN,1912))),1,16),":","")
.;
.I '$G(OPEN) D
..S COUNT=COUNT+1
..S SLOTS("cloneClinicSlots",PATTERNCOUNT,"startDateTime",COUNT)=STARTDATETIME
..S SLOTS("cloneClinicSlots",PATTERNCOUNT,"numberOfSlots",COUNT)=NUMBEROFSLOTS
..S SLOTS("cloneClinicSlots",PATTERNCOUNT,"indefinite",COUNT)=INDEFINITE
..S OPEN=1
.;
.I TIMEDIFF'=SLOTLENGTH D
..S SLOTS("cloneClinicSlots",PATTERNCOUNT,"endDateTime",COUNT)=ENDDATETIME
..S OPEN=0
Q
;
NEXTWEEKDAY(TNODE) ;
N TODAY,DIFF
;
S TODAY=$$DOW^XLFDT(DT,1)
S DIFF=TNODE-TODAY
I DIFF<0 S DIFF=DIFF+7
Q $$FMADD^XLFDT(DT,DIFF)
;
GETINDEFSLOTDATE(CLINICIEN,DATE,TNODE) ;
N TDATE,INDEFDATE
;
S TDATE=9999999,INDEFDATE=0
F S TDATE=$O(^SC(CLINICIEN,"T",TDATE),-1) Q:'TDATE!($G(INDEFDATE)) D
.I $$DOW^XLFDT(TDATE,1)=TNODE D
..I $D(^SC(CLINICIEN,"OST",TDATE)) Q
..S INDEFDATE=TDATE
Q INDEFDATE
;
GETFILE(SUBFILE) ;
Q $SELECT(SUBFILE=0:44.06,SUBFILE=1:44.07,SUBFILE=2:44.08,SUBFILE=3:44.09,SUBFILE=4:44.008,SUBFILE=5:44.009,SUBFILE=6:44.0001,1:"")
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HSDES2CLONESLOTS 4147 printed Sep 23, 2025@20:30 Page 2
SDES2CLONESLOTS ;ALB/BLB - SDES2 SEARCH CLINIC SLOTLENGTHS; Apr 04, 2025@4:17am 1993;Build 8
+1 ;;5.3;Scheduling;**904,906**; Aug 3,1993;Build 5
+2 ;;Per VHA Directive 6402, this routine should not be modified
+3 ;
+4 QUIT
+5 ;
CLONECLINICSLOTS(JSON,SDCONTEXT,CLINIC) ;
+1 NEW ERRORS,SLOTS,PATTERNCOUNT
+2 ;
+3 DO VALCONTEXT^SDES2VALCONTEXT(.ERRORS,.SDCONTEXT)
+4 DO VALFILEIEN^SDES2VALUTIL(,.ERRORS,44,$GET(CLINIC("CLINIC IEN")),1,,18,19)
+5 IF $DATA(ERRORS)
SET ERRORS("cloneClinicSlots",1)=""
DO BUILDJSON^SDES2JSON(.JSON,.ERRORS)
QUIT
+6 ;
+7 DO BUILDINDEFSLOTS(.SLOTS,CLINIC("CLINIC IEN"),.PATTERNCOUNT)
+8 DO BUILDSPECSLOTS(.SLOTS,CLINIC("CLINIC IEN"),.PATTERNCOUNT)
+9 ;
+10 IF '$DATA(SLOTS)
SET SLOTS("cloneClinicSlots",1)=""
+11 DO BUILDJSON^SDES2JSON(.JSON,.SLOTS)
+12 QUIT
+13 ;
BUILDINDEFSLOTS(SLOTS,CLINICIEN,PATTERNCOUNT) ;
+1 NEW TNODE,SLOTDATE,STARTDATE,DATE
+2 ;
+3 FOR TNODE=0:1:6
Begin DoDot:1
+4 ;
+5 SET DATE=99999999
+6 FOR
SET DATE=$ORDER(^SC(CLINICIEN,"T"_TNODE,DATE),-1)
if 'DATE!(DATE<DT)
QUIT
Begin DoDot:2
+7 SET (SLOTDATE,STARTDATE)=$ORDER(^SC(CLINICIEN,"T"_TNODE,DATE),-1)
+8 SET PATTERNCOUNT=$GET(PATTERNCOUNT)+1
+9 ;
+10 IF DATE=9999999
Begin DoDot:3
+11 IF '$GET(SLOTDATE)
Begin DoDot:4
+12 SET (STARTDATE,SLOTDATE)=$$GETINDEFSLOTDATE(CLINICIEN,DATE,TNODE)
+13 ;
+14 IF STARTDATE<DT
Begin DoDot:5
+15 SET STARTDATE=$$NEXTWEEKDAY(TNODE)
End DoDot:5
+16 ;
+17 DO BUILDSLOTS(.SLOTS,CLINICIEN,SLOTDATE,STARTDATE,1,PATTERNCOUNT)
End DoDot:4
QUIT
+18 ;
+19 SET STARTDATE=$$NEXTWEEKDAY(TNODE)
+20 SET SLOTDATE=$$GETINDEFSLOTDATE(CLINICIEN,DATE,TNODE)
+21 DO BUILDSLOTS(.SLOTS,CLINICIEN,SLOTDATE,STARTDATE,1,PATTERNCOUNT)
End DoDot:3
QUIT
+22 ;
+23 IF DATE=9999999
IF SLOTDATE>DT
Begin DoDot:3
+24 SET (SLOTDATE,STARTDATE)=$$NEXTWEEKDAY(TNODE)
+25 DO BUILDSLOTS(.SLOTS,CLINICIEN,SLOTDATE,STARTDATE,1,PATTERNCOUNT)
End DoDot:3
QUIT
+26 ;
+27 IF 'SLOTDATE
Begin DoDot:3
+28 SET (SLOTDATE,STARTDATE)=DATE
End DoDot:3
+29 ;
+30 DO BUILDSLOTS(.SLOTS,CLINICIEN,SLOTDATE,STARTDATE,1,PATTERNCOUNT)
End DoDot:2
End DoDot:1
+31 IF $DATA(SLOTS)
SET SLOTS("cloneClinicSlots",1,"clinicIen")=CLINICIEN
+32 QUIT
+33 ;
BUILDSPECSLOTS(SLOTS,CLINICIEN,PATTERNCOUNT) ;
+1 NEW PATTERN,STARTINGSPACES,INCREMENT,OSTDATE
+2 ;
+3 SET OSTDATE=$$FMADD^XLFDT(DT,-1)
+4 FOR
SET OSTDATE=$ORDER(^SC(CLINICIEN,"OST",OSTDATE))
if 'OSTDATE
QUIT
Begin DoDot:1
+5 SET PATTERNCOUNT=$GET(PATTERNCOUNT)+1
+6 DO BUILDSLOTS(.SLOTS,CLINICIEN,OSTDATE,,0,PATTERNCOUNT)
End DoDot:1
+7 QUIT
+8 ;
BUILDSLOTS(SLOTS,CLINICIEN,DATE,INDEFSTARTDATE,INDEFINITE,PATTERNCOUNT,RETURNALLSLOTS) ;
+1 NEW SUBIEN,OPEN,COUNT,STARTDATE,TIME,NEXTTIME,TIMEDIFF,SLOTLENGTH,STARTDATETIME,ENDDATETIME,NUMBEROFSLOTS
+2 ;
+3 SET SUBIEN=0
SET COUNT=0
SET STARTDATE=$SELECT($GET(INDEFINITE):$GET(INDEFSTARTDATE),1:DATE)
+4 FOR
SET SUBIEN=$ORDER(^SC(CLINICIEN,"T",DATE,2,SUBIEN))
if 'SUBIEN
QUIT
Begin DoDot:1
+5 ;
+6 SET TIME=$$GET1^DIQ(44.004,SUBIEN_","_DATE_","_CLINICIEN_",",.01,"I")
+7 SET TIME=$SELECT(TIME="0000":"0001",1:TIME)
+8 SET NEXTTIME=$$GET1^DIQ(44.004,SUBIEN+1_","_DATE_","_CLINICIEN_",",.01,"I")
+9 SET NEXTTIME=$SELECT(NEXTTIME="0000":"0001",1:NEXTTIME)
+10 SET TIMEDIFF=$$FMDIFF^XLFDT(STARTDATE_"."_NEXTTIME,STARTDATE_"."_TIME,2)/60
+11 SET SLOTLENGTH=$$GET1^DIQ(44,CLINICIEN,1912)
+12 SET NUMBEROFSLOTS=$$GET1^DIQ(44.004,SUBIEN_","_DATE_","_CLINICIEN_",",1,"I")
+13 SET STARTDATETIME=$TRANSLATE($EXTRACT($$FMTISO^SDAMUTDT(STARTDATE_"."_TIME),1,16),":","")
+14 SET ENDDATETIME=$TRANSLATE($EXTRACT($$FMTISO^SDAMUTDT($$FMADD^XLFDT(STARTDATE_"."_TIME,,,$$GET1^DIQ(44,CLINICIEN,1912))),1,16),":","")
+15 ;
+16 IF '$GET(OPEN)
Begin DoDot:2
+17 SET COUNT=COUNT+1
+18 SET SLOTS("cloneClinicSlots",PATTERNCOUNT,"startDateTime",COUNT)=STARTDATETIME
+19 SET SLOTS("cloneClinicSlots",PATTERNCOUNT,"numberOfSlots",COUNT)=NUMBEROFSLOTS
+20 SET SLOTS("cloneClinicSlots",PATTERNCOUNT,"indefinite",COUNT)=INDEFINITE
+21 SET OPEN=1
End DoDot:2
+22 ;
+23 IF TIMEDIFF'=SLOTLENGTH
Begin DoDot:2
+24 SET SLOTS("cloneClinicSlots",PATTERNCOUNT,"endDateTime",COUNT)=ENDDATETIME
+25 SET OPEN=0
End DoDot:2
End DoDot:1
+26 QUIT
+27 ;
NEXTWEEKDAY(TNODE) ;
+1 NEW TODAY,DIFF
+2 ;
+3 SET TODAY=$$DOW^XLFDT(DT,1)
+4 SET DIFF=TNODE-TODAY
+5 IF DIFF<0
SET DIFF=DIFF+7
+6 QUIT $$FMADD^XLFDT(DT,DIFF)
+7 ;
GETINDEFSLOTDATE(CLINICIEN,DATE,TNODE) ;
+1 NEW TDATE,INDEFDATE
+2 ;
+3 SET TDATE=9999999
SET INDEFDATE=0
+4 FOR
SET TDATE=$ORDER(^SC(CLINICIEN,"T",TDATE),-1)
if 'TDATE!($GET(INDEFDATE))
QUIT
Begin DoDot:1
+5 IF $$DOW^XLFDT(TDATE,1)=TNODE
Begin DoDot:2
+6 IF $DATA(^SC(CLINICIEN,"OST",TDATE))
QUIT
+7 SET INDEFDATE=TDATE
End DoDot:2
End DoDot:1
+8 QUIT INDEFDATE
+9 ;
GETFILE(SUBFILE) ;
+1 QUIT $SELECT(SUBFILE=0:44.06,SUBFILE=1:44.07,SUBFILE=2:44.08,SUBFILE=3:44.09,SUBFILE=4:44.008,SUBFILE=5:44.009,SUBFILE=6:44.0001,1:"")
+2 ;