SDES935P ;ALB/BLB - SD*5.3*935 Post Init Routine ; Sept 11, 2025
;;5.3;SCHEDULING;**935**;AUG 13, 1993;Build 2
;;Per VHA Directive 6402, this routine should not be modified
;;
Q
;
EN ;
D TASK
Q
;
;
TASK ; tasks off process to update the direct patient schedule field in the hospital location file
D MES^XPDUTL("")
D MES^XPDUTL(" SD*5.3*935 Post-Install to create utilization report for off hour clinics.")
D MES^XPDUTL("")
N ZTDESC,ZTRTN,ZTIO,ZTSK,X,ZTDTH,ZTSAVE
S ZTDESC="SD*5.3*935 Post Install Routine Task 1"
D NOW^%DTC
S ZTDTH=$P($H,",",1)_","_86399,ZTIO="",ZTRTN="REPORT^SDES935P",ZTSAVE("*")=""
D ^%ZTLOAD
I $D(ZTSK) D
. D MES^XPDUTL(" >>>Task "_ZTSK_" has been queued.")
. D MES^XPDUTL("")
I '$D(ZTSK) D
. D MES^XPDUTL(" UNABLE TO QUEUE THIS JOB.")
. D MES^XPDUTL(" Please contact the National Help Desk to report this issue.")
Q
REPORT ;
N APPTIEN,CREATEDT,UPDATECNT,FDA
K ^XTMP("SDES935P")
S ^XTMP("SDES935P",0)=$$FMADD^XLFDT(DT,30)_"^"_DT_"^SD*5.3*935"
K FDA
S UPDATECNT=1
S UPDATECNT=UPDATECNT+1
;ADD LOGIC HERE
D SLOTS
;
D MAIL
K ^XTMP("SDES935P")
Q
;
MAIL ;
N STANUM,MESS1,XMTEXT,XMSUB,XMY,XMDUZ,DIFROM,%,D,D0,D1,D2,DG,DIC,DICR,DIW,XMDUN,XMZ
S STANUM=$$KSP^XUPARAM("INST")_","
S STANUM=$$GET1^DIQ(4,STANUM,99)
S MESS1="Station: "_STANUM_" - "
S XMDUZ=DUZ
S XMTEXT="^XTMP(""SDES935P"","
S XMSUB=MESS1_"SD*5.3*935 - Post Install Data Report"
S XMDUZ=.5,XMY(DUZ)="",XMY(XMDUZ)=""
S XMY("BARBER.LORI@DOMAIN.EXT")=""
S XMY("DUNNAM.DAVID@DOMAIN.EXT")=""
S XMY("CRUZ.ORLANDO@DOMAIN.EXT")=""
S XMY("BUTLER.BRANDON@DOMAIN.EXT")=""
D ^XMD
Q
;
SLOTS ;
N CLINICIEN,FOUND,SLOTCOUNT,SLOTSTART,TIME,SUBIEN,INTERVAL,ORIGINALSLOTS,SCHEDULEDATE,COUNT,CURRENTSLOTS
N DAYOFTHEWEEK,DIVISION,INSTITUTION,STATIONNUMBER,STOPCODE,STOPCODEIEN,SLOTS,DATE,SLOTCOUNTS,SLOTDATETIME,THIRTY,ONEEIGHTY,THREESIXTYFIVE,TYPE
;
S STOPCODE=0,STOPCODEIEN=0
F STOPCODE=322,323,350,502 D
.S STOPCODEIEN=$O(^DIC(40.7,"C",STOPCODE,""))
.;
.S CLINICIEN=0
.F S CLINICIEN=$O(^SC("AST",STOPCODEIEN,CLINICIEN)) Q:'CLINICIEN D
..S STATIONNUMBER=$$GET1^DIQ(4,$$GET1^DIQ(40.8,$$GET1^DIQ(44,CLINICIEN,3.5,"I"),.07,"I"),99)
..;
..K @$NA(^TMP($J,"SLOTSEARCH"))
..D GETSLOTS^SDEC57($NA(^TMP($J,"SLOTSEARCH")),$$GETRES^SDES2UTIL1(CLINICIEN),$$FMADD^XLFDT(DT,-365),DT)
..;
..S SLOTCOUNT=0
..F S SLOTCOUNT=$O(^TMP($J,"SLOTSEARCH",SLOTCOUNT)) Q:'SLOTCOUNT D
...;
...S SLOTSTART=+$P($G(^TMP($J,"SLOTSEARCH",SLOTCOUNT)),U,2)
...S CURRENTSLOTS=$P($G(^TMP($J,"SLOTSEARCH",SLOTCOUNT)),U,4)
...S DATE=$P(SLOTSTART,".")
...S TIME=$E(SLOTSTART,8,$L(SLOTSTART))
...S INTERVAL=$$FMDIFF^XLFDT(DT,DATE)
...S INTERVAL=$S(INTERVAL<=30:30,INTERVAL<=180:180,1:365)
...S DAYOFTHEWEEK=$$DOW^XLFDT(DATE)
...S SCHEDULEDATE=$S('$D(^SC(CLINICIEN,"T",DATE)):$$GETINDEFSLOTDATE(CLINICIEN,$$FMADD^XLFDT(DATE,1),"T"_$$UP^XLFSTR($$DOW^XLFDT(DATE,1))),1:DATE)
...;
...I $$INACTIVE^SDES2UTIL(CLINICIEN,DATE) Q
...I DAYOFTHEWEEK'="Saturday",DAYOFTHEWEEK'="Sunday",TIME>=.08,TIME<=.163 Q
...I 'SCHEDULEDATE Q
...;
...S SUBIEN=0,SLOTDATETIME=0,FOUND=0
...F S SUBIEN=$O(^SC(CLINICIEN,"T",SCHEDULEDATE,2,SUBIEN)) Q:'SUBIEN!(FOUND=1) D
....;
....I SLOTSTART=$$ISOTFM^SDAMUTDT($$FMTISO^SDAMUTDT(DATE_"."_$$GET1^DIQ(44.004,SUBIEN_","_SCHEDULEDATE_","_CLINICIEN_",",.01,"I"))) D
.....S ORIGINALSLOTS=$$GET1^DIQ(44.004,SUBIEN_","_SCHEDULEDATE_","_CLINICIEN_",",1,"I")
.....S SLOTCOUNTS(STATIONNUMBER,INTERVAL,"TOTAL SLOTS")=$G(SLOTCOUNTS(STATIONNUMBER,INTERVAL,"TOTAL SLOTS"))+ORIGINALSLOTS
.....S SLOTCOUNTS(STATIONNUMBER,INTERVAL,"USED SLOTS")=$G(SLOTCOUNTS(STATIONNUMBER,INTERVAL,"USED SLOTS"))+ORIGINALSLOTS-CURRENTSLOTS
.....S SLOTCOUNTS(STATIONNUMBER,INTERVAL,"UNUSED SLOTS")=$G(SLOTCOUNTS(STATIONNUMBER,INTERVAL,"TOTAL SLOTS"))-$G(SLOTCOUNTS(STATIONNUMBER,INTERVAL,"USED SLOTS"))
.....S FOUND=1
;
;
S COUNT=0
S COUNT=COUNT+1
S ^XTMP("SDES935P",COUNT)="**********************************SLOT REPORT**********************************"
S COUNT=COUNT+1
S ^XTMP("SDES935P",COUNT)="Station Number^TOTAL SLOTS 30 DAYS^TOTAL SLOTS 180 DAYS^TOTAL SLOTS 365 DAYS^USED SLOTS 30 DAYS^USED SLOTS 180 DAYS^USED SLOTS 365 DAYS^UNUSED SLOTS 30 DAYS^UNUSED SLOTS 180 DAYS^UNUSED SLOTS 365 DAYS"
S COUNT=COUNT+1
;
S STATIONNUMBER=0
F S STATIONNUMBER=$O(SLOTCOUNTS(STATIONNUMBER)) Q:'STATIONNUMBER D
.;
.S ^XTMP("SDES935P",COUNT)=STATIONNUMBER
.;
.F TYPE="TOTAL SLOTS","USED SLOTS","UNUSED SLOTS" D
..;
..S THIRTY=$S($G(SLOTCOUNTS(STATIONNUMBER,30,TYPE))'="":$G(SLOTCOUNTS(STATIONNUMBER,30,TYPE)),1:0)
..S ONEEIGHTY=$G(SLOTCOUNTS(STATIONNUMBER,30,TYPE))+$G(SLOTCOUNTS(STATIONNUMBER,180,TYPE))
..S THREESIXTYFIVE=$G(SLOTCOUNTS(STATIONNUMBER,30,TYPE))+$G(SLOTCOUNTS(STATIONNUMBER,180,TYPE))+$G(SLOTCOUNTS(STATIONNUMBER,365,TYPE))
..;
..S ^XTMP("SDES935P",COUNT)=^XTMP("SDES935P",COUNT)_U_THIRTY_U_ONEEIGHTY_U_THREESIXTYFIVE
.S COUNT=COUNT+1
;
Q
;
GETINDEFSLOTDATE(CLINICIEN,DATE,TNODE) ;
N TDATE,INDEFDATE
;
S INDEFDATE=0
F S DATE=$O(^SC(CLINICIEN,"T",DATE),-1) Q:'DATE!($G(INDEFDATE)) D
.I $$DOW^XLFDT(DATE,1)=$E(TNODE,2) D
..I $D(^SC(CLINICIEN,"OST",DATE)) Q
..S INDEFDATE=DATE
Q INDEFDATE
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HSDES935P 5269 printed Jan 29, 2026@15:55:04 Page 2
SDES935P ;ALB/BLB - SD*5.3*935 Post Init Routine ; Sept 11, 2025
+1 ;;5.3;SCHEDULING;**935**;AUG 13, 1993;Build 2
+2 ;;Per VHA Directive 6402, this routine should not be modified
+3 ;;
+4 QUIT
+5 ;
EN ;
+1 DO TASK
+2 QUIT
+3 ;
+4 ;
TASK ; tasks off process to update the direct patient schedule field in the hospital location file
+1 DO MES^XPDUTL("")
+2 DO MES^XPDUTL(" SD*5.3*935 Post-Install to create utilization report for off hour clinics.")
+3 DO MES^XPDUTL("")
+4 NEW ZTDESC,ZTRTN,ZTIO,ZTSK,X,ZTDTH,ZTSAVE
+5 SET ZTDESC="SD*5.3*935 Post Install Routine Task 1"
+6 DO NOW^%DTC
+7 SET ZTDTH=$PIECE($HOROLOG,",",1)_","_86399
SET ZTIO=""
SET ZTRTN="REPORT^SDES935P"
SET ZTSAVE("*")=""
+8 DO ^%ZTLOAD
+9 IF $DATA(ZTSK)
Begin DoDot:1
+10 DO MES^XPDUTL(" >>>Task "_ZTSK_" has been queued.")
+11 DO MES^XPDUTL("")
End DoDot:1
+12 IF '$DATA(ZTSK)
Begin DoDot:1
+13 DO MES^XPDUTL(" UNABLE TO QUEUE THIS JOB.")
+14 DO MES^XPDUTL(" Please contact the National Help Desk to report this issue.")
End DoDot:1
+15 QUIT
REPORT ;
+1 NEW APPTIEN,CREATEDT,UPDATECNT,FDA
+2 KILL ^XTMP("SDES935P")
+3 SET ^XTMP("SDES935P",0)=$$FMADD^XLFDT(DT,30)_"^"_DT_"^SD*5.3*935"
+4 KILL FDA
+5 SET UPDATECNT=1
+6 SET UPDATECNT=UPDATECNT+1
+7 ;ADD LOGIC HERE
+8 DO SLOTS
+9 ;
+10 DO MAIL
+11 KILL ^XTMP("SDES935P")
+12 QUIT
+13 ;
MAIL ;
+1 NEW STANUM,MESS1,XMTEXT,XMSUB,XMY,XMDUZ,DIFROM,%,D,D0,D1,D2,DG,DIC,DICR,DIW,XMDUN,XMZ
+2 SET STANUM=$$KSP^XUPARAM("INST")_","
+3 SET STANUM=$$GET1^DIQ(4,STANUM,99)
+4 SET MESS1="Station: "_STANUM_" - "
+5 SET XMDUZ=DUZ
+6 SET XMTEXT="^XTMP(""SDES935P"","
+7 SET XMSUB=MESS1_"SD*5.3*935 - Post Install Data Report"
+8 SET XMDUZ=.5
SET XMY(DUZ)=""
SET XMY(XMDUZ)=""
+9 SET XMY("BARBER.LORI@DOMAIN.EXT")=""
+10 SET XMY("DUNNAM.DAVID@DOMAIN.EXT")=""
+11 SET XMY("CRUZ.ORLANDO@DOMAIN.EXT")=""
+12 SET XMY("BUTLER.BRANDON@DOMAIN.EXT")=""
+13 DO ^XMD
+14 QUIT
+15 ;
SLOTS ;
+1 NEW CLINICIEN,FOUND,SLOTCOUNT,SLOTSTART,TIME,SUBIEN,INTERVAL,ORIGINALSLOTS,SCHEDULEDATE,COUNT,CURRENTSLOTS
+2 NEW DAYOFTHEWEEK,DIVISION,INSTITUTION,STATIONNUMBER,STOPCODE,STOPCODEIEN,SLOTS,DATE,SLOTCOUNTS,SLOTDATETIME,THIRTY,ONEEIGHTY,THREESIXTYFIVE,TYPE
+3 ;
+4 SET STOPCODE=0
SET STOPCODEIEN=0
+5 FOR STOPCODE=322,323,350,502
Begin DoDot:1
+6 SET STOPCODEIEN=$ORDER(^DIC(40.7,"C",STOPCODE,""))
+7 ;
+8 SET CLINICIEN=0
+9 FOR
SET CLINICIEN=$ORDER(^SC("AST",STOPCODEIEN,CLINICIEN))
if 'CLINICIEN
QUIT
Begin DoDot:2
+10 SET STATIONNUMBER=$$GET1^DIQ(4,$$GET1^DIQ(40.8,$$GET1^DIQ(44,CLINICIEN,3.5,"I"),.07,"I"),99)
+11 ;
+12 KILL @$NAME(^TMP($JOB,"SLOTSEARCH"))
+13 DO GETSLOTS^SDEC57($NAME(^TMP($JOB,"SLOTSEARCH")),$$GETRES^SDES2UTIL1(CLINICIEN),$$FMADD^XLFDT(DT,-365),DT)
+14 ;
+15 SET SLOTCOUNT=0
+16 FOR
SET SLOTCOUNT=$ORDER(^TMP($JOB,"SLOTSEARCH",SLOTCOUNT))
if 'SLOTCOUNT
QUIT
Begin DoDot:3
+17 ;
+18 SET SLOTSTART=+$PIECE($GET(^TMP($JOB,"SLOTSEARCH",SLOTCOUNT)),U,2)
+19 SET CURRENTSLOTS=$PIECE($GET(^TMP($JOB,"SLOTSEARCH",SLOTCOUNT)),U,4)
+20 SET DATE=$PIECE(SLOTSTART,".")
+21 SET TIME=$EXTRACT(SLOTSTART,8,$LENGTH(SLOTSTART))
+22 SET INTERVAL=$$FMDIFF^XLFDT(DT,DATE)
+23 SET INTERVAL=$SELECT(INTERVAL<=30:30,INTERVAL<=180:180,1:365)
+24 SET DAYOFTHEWEEK=$$DOW^XLFDT(DATE)
+25 SET SCHEDULEDATE=$SELECT('$DATA(^SC(CLINICIEN,"T",DATE)):$$GETINDEFSLOTDATE(CLINICIEN,$$FMADD^XLFDT(DATE,1),"T"_$$UP^XLFSTR($$DOW^XLFDT(DATE,1))),1:DATE)
+26 ;
+27 IF $$INACTIVE^SDES2UTIL(CLINICIEN,DATE)
QUIT
+28 IF DAYOFTHEWEEK'="Saturday"
IF DAYOFTHEWEEK'="Sunday"
IF TIME>=.08
IF TIME<=.163
QUIT
+29 IF 'SCHEDULEDATE
QUIT
+30 ;
+31 SET SUBIEN=0
SET SLOTDATETIME=0
SET FOUND=0
+32 FOR
SET SUBIEN=$ORDER(^SC(CLINICIEN,"T",SCHEDULEDATE,2,SUBIEN))
if 'SUBIEN!(FOUND=1)
QUIT
Begin DoDot:4
+33 ;
+34 IF SLOTSTART=$$ISOTFM^SDAMUTDT($$FMTISO^SDAMUTDT(DATE_"."_$$GET1^DIQ(44.004,SUBIEN_","_SCHEDULEDATE_","_CLINICIEN_",",.01,"I")))
Begin DoDot:5
+35 SET ORIGINALSLOTS=$$GET1^DIQ(44.004,SUBIEN_","_SCHEDULEDATE_","_CLINICIEN_",",1,"I")
+36 SET SLOTCOUNTS(STATIONNUMBER,INTERVAL,"TOTAL SLOTS")=$GET(SLOTCOUNTS(STATIONNUMBER,INTERVAL,"TOTAL SLOTS"))+ORIGINALSLOTS
+37 SET SLOTCOUNTS(STATIONNUMBER,INTERVAL,"USED SLOTS")=$GET(SLOTCOUNTS(STATIONNUMBER,INTERVAL,"USED SLOTS"))+ORIGINALSLOTS-CURRENTSLOTS
+38 SET SLOTCOUNTS(STATIONNUMBER,INTERVAL,"UNUSED SLOTS")=$GET(SLOTCOUNTS(STATIONNUMBER,INTERVAL,"TOTAL SLOTS"))-$GET(SLOTCOUNTS(STATIONNUMBER,INTERVAL,"USED SLOTS"))
+39 SET FOUND=1
End DoDot:5
End DoDot:4
End DoDot:3
End DoDot:2
End DoDot:1
+40 ;
+41 ;
+42 SET COUNT=0
+43 SET COUNT=COUNT+1
+44 SET ^XTMP("SDES935P",COUNT)="**********************************SLOT REPORT**********************************"
+45 SET COUNT=COUNT+1
+46 SET ^XTMP("SDES935P",COUNT)="Station Number^TOTAL SLOTS 30 DAYS^TOTAL SLOTS 180 DAYS^TOTAL SLOTS 365 DAYS^USED SLOTS 30 DAYS^USED SLOTS 180 DAYS^USED SLOTS 365 DAYS^UNUSED SLOTS 30 DAYS^UNUSED SLOTS 180 DAYS^UNUSED SLOTS 365 DAYS"
+47 SET COUNT=COUNT+1
+48 ;
+49 SET STATIONNUMBER=0
+50 FOR
SET STATIONNUMBER=$ORDER(SLOTCOUNTS(STATIONNUMBER))
if 'STATIONNUMBER
QUIT
Begin DoDot:1
+51 ;
+52 SET ^XTMP("SDES935P",COUNT)=STATIONNUMBER
+53 ;
+54 FOR TYPE="TOTAL SLOTS","USED SLOTS","UNUSED SLOTS"
Begin DoDot:2
+55 ;
+56 SET THIRTY=$SELECT($GET(SLOTCOUNTS(STATIONNUMBER,30,TYPE))'="":$GET(SLOTCOUNTS(STATIONNUMBER,30,TYPE)),1:0)
+57 SET ONEEIGHTY=$GET(SLOTCOUNTS(STATIONNUMBER,30,TYPE))+$GET(SLOTCOUNTS(STATIONNUMBER,180,TYPE))
+58 SET THREESIXTYFIVE=$GET(SLOTCOUNTS(STATIONNUMBER,30,TYPE))+$GET(SLOTCOUNTS(STATIONNUMBER,180,TYPE))+$GET(SLOTCOUNTS(STATIONNUMBER,365,TYPE))
+59 ;
+60 SET ^XTMP("SDES935P",COUNT)=^XTMP("SDES935P",COUNT)_U_THIRTY_U_ONEEIGHTY_U_THREESIXTYFIVE
End DoDot:2
+61 SET COUNT=COUNT+1
End DoDot:1
+62 ;
+63 QUIT
+64 ;
GETINDEFSLOTDATE(CLINICIEN,DATE,TNODE) ;
+1 NEW TDATE,INDEFDATE
+2 ;
+3 SET INDEFDATE=0
+4 FOR
SET DATE=$ORDER(^SC(CLINICIEN,"T",DATE),-1)
if 'DATE!($GET(INDEFDATE))
QUIT
Begin DoDot:1
+5 IF $$DOW^XLFDT(DATE,1)=$EXTRACT(TNODE,2)
Begin DoDot:2
+6 IF $DATA(^SC(CLINICIEN,"OST",DATE))
QUIT
+7 SET INDEFDATE=DATE
End DoDot:2
End DoDot:1
+8 QUIT INDEFDATE
+9 ;