SDESCLINDAILYSCH ;ALB/BLB - SDES GET CLINIC DAILY SCHEDULE ;Jan 9, 2023@18:47
;;5.3;Scheduling;**836,860,906**;Aug 13, 1993;Build 5
;;Per VHA Directive 6402, this routine should not be modified
;
Q
;
GETSCHEDULE(JSON,CLINICIEN,DATE) ;
N ERRORS,SLOTS,DOW,TNODE,SCHEDULEDATE
;
D VALIDATEDATE(.ERRORS,.DATE,$G(CLINICIEN))
D VALIDATECLINIC(.ERRORS,$G(CLINICIEN))
I $D(ERRORS) D BUILDJSON(.JSON,.ERRORS) Q
;
S SCHEDULEDATE=DATE
I '$D(^SC(CLINICIEN,"T",DATE)) D
.S SCHEDULEDATE=$$GETINDEFSLOTDATE(CLINICIEN,DATE,$$SUB(.TNODE,$$UP^XLFSTR($$DOW^XLFDT(DATE))))
;
D BUILDSLOTS(.SLOTS,CLINICIEN,SCHEDULEDATE,DATE)
;
I '$D(SLOTS) S SLOTS("ClinicSlot",1)=""
D BUILDJSON(.JSON,.SLOTS)
Q
;
BUILDSLOTS(SLOTS,CLINICIEN,SCHEDULEDATE,SEARCHDATE) ;
N SUBIEN,COUNT
;
S SUBIEN=0,COUNT=0
F S SUBIEN=$O(^SC(CLINICIEN,"T",SCHEDULEDATE,2,SUBIEN)) Q:'SUBIEN D
.S COUNT=COUNT+1
.S SLOTS("ClinicSlot",COUNT,"Date")=$$FMTISO^SDAMUTDT(SEARCHDATE)
.S SLOTS("ClinicSlot",COUNT,"OpenSlots")=$$GET1^DIQ(44.004,SUBIEN_","_SCHEDULEDATE_","_CLINICIEN_",",1,"I")
.S SLOTS("ClinicSlot",COUNT,"StartTime")=$$GET1^DIQ(44.004,SUBIEN_","_SCHEDULEDATE_","_CLINICIEN_",",.01,"I")
Q
;
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)=$E(TNODE,2) D
..I $D(^SC(CLINICIEN,"OST",TDATE)) Q
..S INDEFDATE=TDATE
Q INDEFDATE
;
VALIDATEDATE(ERRORS,DATE,CLINICIEN) ;
N SCHEDULE
;
I $G(DATE)="" D ERRLOG^SDESJSON(.ERRORS,45) Q
S DATE=$$ISOTFM^SDAMUTDT(DATE,CLINICIEN)
I $G(DATE)=-1 D ERRLOG^SDESJSON(.ERRORS,46) Q
I $G(DATE)&(DATE<DT) D ERRLOG^SDESJSON(.ERRORS,71)
Q DATE
;
VALIDATECLINIC(ERRORS,CLINICIEN) ;
I CLINICIEN="" D ERRLOG^SDESJSON(.ERRORS,18) Q
I CLINICIEN'="",'$D(^SC(CLINICIEN,0)) D ERRLOG^SDESJSON(.ERRORS,19)
Q
;
SUB(SUB,DOW) ;
S SUB="T"_$S(DOW="SUNDAY":0,DOW="MONDAY":1,DOW="TUESDAY":2,DOW="WEDNESDAY":3,DOW="THURSDAY":4,DOW="FRIDAY":5,DOW="SATURDAY":6,1:"")
Q SUB
;
BUILDJSON(JSONRETURN,RETURN) ;
N JSONERROR
D ENCODE^XLFJSON("RETURN","JSONRETURN","JSONERROR")
Q
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HSDESCLINDAILYSCH 2187 printed Sep 23, 2025@20:32:58 Page 2
SDESCLINDAILYSCH ;ALB/BLB - SDES GET CLINIC DAILY SCHEDULE ;Jan 9, 2023@18:47
+1 ;;5.3;Scheduling;**836,860,906**;Aug 13, 1993;Build 5
+2 ;;Per VHA Directive 6402, this routine should not be modified
+3 ;
+4 QUIT
+5 ;
GETSCHEDULE(JSON,CLINICIEN,DATE) ;
+1 NEW ERRORS,SLOTS,DOW,TNODE,SCHEDULEDATE
+2 ;
+3 DO VALIDATEDATE(.ERRORS,.DATE,$GET(CLINICIEN))
+4 DO VALIDATECLINIC(.ERRORS,$GET(CLINICIEN))
+5 IF $DATA(ERRORS)
DO BUILDJSON(.JSON,.ERRORS)
QUIT
+6 ;
+7 SET SCHEDULEDATE=DATE
+8 IF '$DATA(^SC(CLINICIEN,"T",DATE))
Begin DoDot:1
+9 SET SCHEDULEDATE=$$GETINDEFSLOTDATE(CLINICIEN,DATE,$$SUB(.TNODE,$$UP^XLFSTR($$DOW^XLFDT(DATE))))
End DoDot:1
+10 ;
+11 DO BUILDSLOTS(.SLOTS,CLINICIEN,SCHEDULEDATE,DATE)
+12 ;
+13 IF '$DATA(SLOTS)
SET SLOTS("ClinicSlot",1)=""
+14 DO BUILDJSON(.JSON,.SLOTS)
+15 QUIT
+16 ;
BUILDSLOTS(SLOTS,CLINICIEN,SCHEDULEDATE,SEARCHDATE) ;
+1 NEW SUBIEN,COUNT
+2 ;
+3 SET SUBIEN=0
SET COUNT=0
+4 FOR
SET SUBIEN=$ORDER(^SC(CLINICIEN,"T",SCHEDULEDATE,2,SUBIEN))
if 'SUBIEN
QUIT
Begin DoDot:1
+5 SET COUNT=COUNT+1
+6 SET SLOTS("ClinicSlot",COUNT,"Date")=$$FMTISO^SDAMUTDT(SEARCHDATE)
+7 SET SLOTS("ClinicSlot",COUNT,"OpenSlots")=$$GET1^DIQ(44.004,SUBIEN_","_SCHEDULEDATE_","_CLINICIEN_",",1,"I")
+8 SET SLOTS("ClinicSlot",COUNT,"StartTime")=$$GET1^DIQ(44.004,SUBIEN_","_SCHEDULEDATE_","_CLINICIEN_",",.01,"I")
End DoDot:1
+9 QUIT
+10 ;
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)=$EXTRACT(TNODE,2)
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 ;
VALIDATEDATE(ERRORS,DATE,CLINICIEN) ;
+1 NEW SCHEDULE
+2 ;
+3 IF $GET(DATE)=""
DO ERRLOG^SDESJSON(.ERRORS,45)
QUIT
+4 SET DATE=$$ISOTFM^SDAMUTDT(DATE,CLINICIEN)
+5 IF $GET(DATE)=-1
DO ERRLOG^SDESJSON(.ERRORS,46)
QUIT
+6 IF $GET(DATE)&(DATE<DT)
DO ERRLOG^SDESJSON(.ERRORS,71)
+7 QUIT DATE
+8 ;
VALIDATECLINIC(ERRORS,CLINICIEN) ;
+1 IF CLINICIEN=""
DO ERRLOG^SDESJSON(.ERRORS,18)
QUIT
+2 IF CLINICIEN'=""
IF '$DATA(^SC(CLINICIEN,0))
DO ERRLOG^SDESJSON(.ERRORS,19)
+3 QUIT
+4 ;
SUB(SUB,DOW) ;
+1 SET SUB="T"_$SELECT(DOW="SUNDAY":0,DOW="MONDAY":1,DOW="TUESDAY":2,DOW="WEDNESDAY":3,DOW="THURSDAY":4,DOW="FRIDAY":5,DOW="SATURDAY":6,1:"")
+2 QUIT SUB
+3 ;
BUILDJSON(JSONRETURN,RETURN) ;
+1 NEW JSONERROR
+2 DO ENCODE^XLFJSON("RETURN","JSONRETURN","JSONERROR")
+3 QUIT
+4 ;