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

SDES949P.m

Go to the documentation of this file.
SDES949P ;ALB/LAB,JAS - SD*5.3*949 Post Init Routine ; Jun 18, 2026
 ;;5.3;SCHEDULING;**949**;AUG 13, 1993;Build 4
 ;;Per VHA Directive 6402, this routine should not be modified
 ;;
 Q
 ;
EN ;
 D TASK,TASK2,TASK3
 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*949 Post-Install to identify clinics with slot decrement issues")
 D MES^XPDUTL("")
 N ZTDESC,ZTRTN,ZTIO,ZTSK,X,ZTDTH,ZTSAVE,%,%H,%I
 S ZTDESC="SD*5.3*949 Post Install Routine Task 1"
 D NOW^%DTC
 S ZTDTH=$P($H,",",1)_","_86399,ZTIO="",ZTRTN="REPORT^SDES949P",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 COUNT,STOPCODEIEN,CLINICCOUNT,ISSUECOUNT,STOPCODE,CLINICIEN,SLOTCOUNT,SLOTSTART,CURRENTSLOTS,DATE,TIME
 N DAYOFTHEWEEK,SCHEDULEDATE,SUBIEN,ORIGINALSLOTS,APPTSUBIEN,APPTCOUNT,FOUND,SLOTDATETIME,DFN,DFNLIST,%,%DT,I
 K ^XTMP("SDES949P")
 S ^XTMP("SDES949P",0)=$$FMADD^XLFDT(DT,30)_"^"_DT_"^SD*5.3*949"
 S ^XTMP("SDES949P",1)="**********************************SLOT REPORT**********************************"
 S COUNT=4
 S ^XTMP("SDES949P",COUNT)="Clinic IEN^Clinic Name^Slot Date Time^Appointment Count^Original Count^Current Count^Patient DFN*Appointment IEN (|list)"
 S COUNT=COUNT+1
 S STOPCODEIEN=0,CLINICCOUNT=0,ISSUECOUNT=0
 F STOPCODE=342,303,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 CLINICCOUNT=CLINICCOUNT+1
 ..;
 ..K @$NA(^TMP($J,"SLOTSEARCH"))
 ..D GETSLOTS^SDEC57($NA(^TMP($J,"SLOTSEARCH")),$$GETRES^SDES2UTIL1(CLINICIEN),$$FMADD^XLFDT(DT-365),$$FMADD^XLFDT(DT,390))
 ..;
 ..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)
 ...I CURRENTSLOTS?1A S CURRENTSLOTS=$F("abcdefghijklmnopqrstuvwxyz",CURRENTSLOTS)-1
 ...S DATE=$P(SLOTSTART,".")
 ...;quit if holiday and clinic doesn't meet on holiday
 ...Q:$D(^HOLIDAY(DATE,0))&($$GET1^DIQ(44,CLINICIEN,1918.5,"E")'="YES")
 ...Q:$G(^SC(CLINICIEN,"ST",DATE,1))["CANCELLED"
 ...Q:CURRENTSLOTS="X"  ;cancelled time slot
 ...S TIME=$E(SLOTSTART,8,$L(SLOTSTART))
 ...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)
 ...;
 ...Q:$$INACTIVE^SDES2UTIL(CLINICIEN,DATE)
 ...Q:'(SCHEDULEDATE)
 ...;
 ...S SUBIEN=0,SLOTDATETIME=0,FOUND=0
 ...F  S SUBIEN=$O(^SC(CLINICIEN,"T",SCHEDULEDATE,2,SUBIEN)) Q:'SUBIEN!(FOUND=1)  D
 ....I SLOTSTART=$$HTFM^XLFDT($$FMTH^XLFDT(DATE_"."_$$GET1^DIQ(44.004,SUBIEN_","_SCHEDULEDATE_","_CLINICIEN_",",.01,"I"))) D
 .....;
 .....S ORIGINALSLOTS=$$GET1^DIQ(44.004,SUBIEN_","_SCHEDULEDATE_","_CLINICIEN_",",1,"I")
 .....;
 .....S APPTSUBIEN=0,APPTCOUNT=0
 .....S DFNLIST=""
 .....F  S APPTSUBIEN=$O(^SC(CLINICIEN,"S",SLOTSTART,1,APPTSUBIEN)) Q:'APPTSUBIEN  D
 ......I $$GET1^DIQ(44.003,APPTSUBIEN_","_SLOTSTART_","_CLINICIEN_",",310,"I")'="C" D
 .......S APPTCOUNT=APPTCOUNT+1
 .......S DFN=$$GET1^DIQ(44.003,APPTSUBIEN_","_SLOTSTART_","_CLINICIEN_",",.01,"I")
 .......S DFNLIST=DFNLIST_DFN_"*"_$O(^SDEC(409.84,"APTDT",DFN,SLOTSTART,""),-1)_"|"
 .....;
 .....I (APPTCOUNT>0)&((ORIGINALSLOTS-APPTCOUNT)<CURRENTSLOTS) D
 ......S ISSUECOUNT=ISSUECOUNT+1
 ......;
 ......S ^XTMP("SDES949P",COUNT)=CLINICIEN_U_$$GET1^DIQ(44,CLINICIEN,.01)_U_$$FMTISO^SDAMUTDT(SLOTSTART)
 ......S ^XTMP("SDES949P",COUNT)=^XTMP("SDES949P",COUNT)_U_APPTCOUNT_U_ORIGINALSLOTS_U_CURRENTSLOTS_U_DFNLIST
 ......S COUNT=COUNT+1
 ......S FOUND=1
 S ^XTMP("SDES949P",2)="Total Number of Clinics Searched : "_CLINICCOUNT
 S COUNT=COUNT+1
 S ^XTMP("SDES949P",3)="Total Number of Issues Found     : "_ISSUECOUNT
 ;
 D MAIL
 Q
 ;
MAIL ;
 N SITENUMBER,MESS1,XMTEXT,XMSUB,XMY,XMDUZ,DIFROM,%,D,D0,D1,D2,DG,DIC,DICR,DIW,XMDUN,XMZ,TESTORPROD
 S SITENUMBER=+$$STA^XUAF4($$KSP^XUPARAM("INST"))
 S TESTORPROD=$$PROD^XUPROD
 S MESS1="Station: "_SITENUMBER_" ("_$S(TESTORPROD:"PROD",1:"TEST")_") - "
 S XMDUZ=DUZ
 S XMTEXT="^XTMP(""SDES949P"","
 S XMSUB=MESS1_"SD*5.3*949 - Post Install Data Report"
 S XMDUZ=.5,XMY(DUZ)="",XMY(XMDUZ)=""
 S XMY("BARBER.LORI@DOMAIN.EXT")=""
 I $G(TESTORPROD)="PROD" D
 . S XMY("DUNNAM.DAVID@DOMAIN.EXT")=""
 . S XMY("CRUZ.ORLANDO@DOMAIN.EXT")=""
 D ^XMD
 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
 ;
TASK2 ;
 D MES^XPDUTL("")
 D MES^XPDUTL(" SD*5.3*949 Post-Install to create report of instances of ghost availability.")
 D MES^XPDUTL("")
 N ZTDESC,ZTRTN,ZTIO,ZTSK,X,ZTDTH,ZTSAVE
 S ZTDESC="SD*5.3*949 Post Install Routine Task 2"
 D NOW^%DTC
 S ZTDTH=$P($H,",",1)_","_86399,ZTIO="",ZTRTN="REPORT2^SDES949P",ZTSAVE("*")=""
 D ^%ZTLOAD
 I $D(ZTSK) D  Q
 . 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
 ;
REPORT2 ;
 N CREATEDT,UPDATECNT
 K ^XTMP("SDES949P-2")
 S ^XTMP("SDES949P-2",0)=$$FMADD^XLFDT(DT,30)_"^"_DT_"^SD*5.3*949"
 S UPDATECNT=1
 S UPDATECNT=UPDATECNT+1
 ;
 D IDENTIFYGHOST
 ;
 D MAIL2
 Q
 ;
MAIL2 ;
 N SITENUMBER,MESS1,XMTEXT,XMSUB,XMY,XMDUZ,DIFROM,%,D,D0,D1,D2,DG,DIC,DICR,DIW,XMDUN,XMZ,TESTORPROD
 S SITENUMBER=+$$STA^XUAF4($$KSP^XUPARAM("INST"))
 S TESTORPROD=$$PROD^XUPROD
 S MESS1="Station: "_SITENUMBER_" ("_$S(TESTORPROD:"PROD",1:"TEST")_") - "
 S XMDUZ=DUZ
 S XMTEXT="^XTMP(""SDES949P-2"","
 S XMSUB=MESS1_"SD*5.3*949 - Ghost Availability Data Report"
 S XMDUZ=.5,XMY(DUZ)="",XMY(XMDUZ)=""
 S XMY("BARBER.LORI@DOMAIN.EXT")=""
 S XMY("BUTLER.BRANDON@DOMAIN.EXT")=""
 S XMY("SWESKY.JEFFREY@DOMAIN.EXT")=""
 I $G(TESTORPROD)="PROD" D
 . S XMY("DUNNAM.DAVID@DOMAIN.EXT")=""
 . S XMY("CRUZ.ORLANDO@DOMAIN.EXT")=""
 D ^XMD
 Q
 ;
IDENTIFYGHOST() ;
 N CLINICIEN,GHOST,CLINICIEN,CLINICNAME,COUNT,NONSTDDATE,INDEFDATE,STARTDATE,ORPHANDATE
 ;
 S CLINICIEN=0
 F  S CLINICIEN=$O(^SC(CLINICIEN)) Q:'CLINICIEN  D
 .I $$INACTIVE^SDESUTIL(CLINICIEN) Q
 .;
 .S STARTDATE=$$FMADD^XLFDT(DT,-$$GET1^DIQ(44,CLINICIEN,2002))
 .;
 .D INDEFOVERWRITES(.GHOST,CLINICIEN,STARTDATE)
 .D ORPHANEDOSTDAYS(.GHOST,CLINICIEN)
 ;
 K ^XTMP("SDES949P-2")
 S COUNT=1
 S ^XTMP("SDES949P-2",COUNT)="**********************************GHOST AVAILABILITY REPORT**********************************"
 S COUNT=COUNT+1
 S ^XTMP("SDES949P-2",COUNT)="CLINIC^ISSUE DESCRIPTION^DATE"
 ;
 S CLINICIEN=0
 F  S CLINICIEN=$O(GHOST(CLINICIEN)),CLINICNAME=$$GET1^DIQ(44,CLINICIEN,.01) Q:'CLINICIEN  D
 .;
 .S INDEFDATE=0
 .F  S INDEFDATE=$O(GHOST(CLINICIEN,"INDEFINITE OVERWRITE",INDEFDATE)) Q:'INDEFDATE  D
 ..S COUNT=COUNT+1
 ..S ^XTMP("SDES949P-2",COUNT)=CLINICNAME_U
 ..S ^XTMP("SDES949P-2",COUNT)=^XTMP("SDES949P-2",COUNT)_"Indefinite Availability is overlaid with Special Availability"_U_$$FMTISO^SDAMUTDT(INDEFDATE)
 .;
 .S ORPHANDATE=0
 .F  S ORPHANDATE=$O(GHOST(CLINICIEN,"ORPHANED OST",ORPHANDATE)) Q:'ORPHANDATE  D
 ..S COUNT=COUNT+1
 ..S ^XTMP("SDES949P-2",COUNT)=CLINICNAME_U
 ..S ^XTMP("SDES949P-2",COUNT)=^XTMP("SDES949P-2",COUNT)_"Unable to define precise time for special availability defined"_U_$$FMTISO^SDAMUTDT(ORPHANDATE)
 ;
 Q
 ;
INDEFOVERWRITES(GHOST,CLINICIEN,DATE) ;
 N TNODE
 ;
 F TNODE=0:1:6 I $D(^SC(CLINICIEN,"T"_TNODE)) D
 .;
 .I $O(^SC(CLINICIEN,"T"_TNODE,0))=9999999,$D(^SC(CLINICIEN,"OST")) D  Q
 ..S DATE=$$FMADD^XLFDT(DT,-14)
 ..F  S DATE=$O(^SC(CLINICIEN,"OST",DATE)) Q:'DATE  D
 ...Q:'$D(^SC(CLINICIEN,"OST",DATE,1))
 ...Q:^SC(CLINICIEN,"OST",DATE,1)'["["
 ...I TNODE=($$FMTH^XLFDT(DATE)+4#7) D
 ....S GHOST(CLINICIEN,"INDEFINITE OVERWRITE",DATE)=""
 .;
 .S DATE=$$FMADD^XLFDT(DT,-14)
 .F  S DATE=$O(^SC(CLINICIEN,"T"_TNODE,DATE)) Q:'DATE  D
 ..;
 ..I $O(^SC(CLINICIEN,"T"_TNODE,DATE))=9999999,$D(^SC(CLINICIEN,"OST",DATE)) D
 ...Q:'$D(^SC(CLINICIEN,"OST",DATE,1))
 ...Q:^SC(CLINICIEN,"OST",DATE,1)'["["
 ...S GHOST(CLINICIEN,"INDEFINITE OVERWRITE",DATE)=""
 Q
 ;
ORPHANEDOSTDAYS(GHOST,CLINICIEN) ;
 N DATE
 ;
 S DATE=$$FMADD^XLFDT(DT,-14)
 F  S DATE=$O(^SC(CLINICIEN,"OST",DATE)) Q:'DATE  D
 .Q:'$D(^SC(CLINICIEN,"OST",DATE,1))
 .Q:^SC(CLINICIEN,"OST",DATE,1)'["["
 .I '$D(^SC(CLINICIEN,"T",DATE)) D
 ..S GHOST(CLINICIEN,"ORPHANED OST",DATE)=""
 Q
 ;
TASK3 ;
 D MES^XPDUTL("")
 D MES^XPDUTL(" SD*5.3*949 Post-Install to identify potential disappearing grid scenarios prior to remap.")
 D MES^XPDUTL("")
 N ZTDESC,ZTRTN,ZTIO,ZTSK,X,ZTDTH,ZTSAVE
 S ZTDESC="SD*5.3*949 Post Install Routine Task 3"
 D NOW^%DTC
 S ZTDTH=$P($H,",",1)_","_86399,ZTIO="",ZTRTN="REPORT3^SDES949P",ZTSAVE("*")=""
 D ^%ZTLOAD
 I $D(ZTSK) D  Q
 . D MES^XPDUTL(" >>>Task "_ZTSK_" has been queued.")
 . D MES^XPDUTL("")
 I '$D(ZTSK) D  Q
 . D MES^XPDUTL(" UNABLE TO QUEUE THIS JOB.")
 . D MES^XPDUTL(" Please contact the National Help Desk to report this issue.")
 Q
 ;
REPORT3 ;
 N CREATEDT,UPDATECNT
 K ^XTMP("SDES949P-3")
 S ^XTMP("SDES949P-3",0)=$$FMADD^XLFDT(DT,30)_"^"_DT_"^SD*5.3*949"
 S UPDATECNT=1
 S UPDATECNT=UPDATECNT+1
 ;ADD LOGIC HERE
 D DISPGRIDS
 ;
 D MAIL3
 Q
 ;
MAIL3 ;
 N SITENUMBER,MESS1,XMTEXT,XMSUB,XMY,XMDUZ,DIFROM,%,D,D0,D1,D2,DG,DIC,DICR,DIW,XMDUN,XMZ,TESTORPROD
 S SITENUMBER=+$$STA^XUAF4($$KSP^XUPARAM("INST"))
 S TESTORPROD=$$PROD^XUPROD
 S MESS1="Station: "_SITENUMBER_" ("_$S(TESTORPROD:"PROD",1:"TEST")_") - "
 S XMDUZ=DUZ
 S XMTEXT="^XTMP(""SDES949P-3"","
 S XMSUB=MESS1_"SD*5.3*949 - Potential Disappearing Grid Report"
 S XMDUZ=.5,XMY(DUZ)="",XMY(XMDUZ)=""
 S XMY("BARBER.LORI@DOMAIN.EXT")=""
 S XMY("SWESKY.JEFFREY@DOMAIN.EXT")=""
 I $G(TESTORPROD)="PROD" D
 . S XMY("DUNNAM.DAVID@DOMAIN.EXT")=""
 . S XMY("CRUZ.ORLANDO@DOMAIN.EXT")=""
 D ^XMD
 Q
 ;
DISPGRIDS() ;
 ;
 N CLINICIEN,CLINICNAME,COUNT,ENDDATE,GRIDDATE,HOLSCHED,PATTERN,STARTDATE,TNODE
 ;
 K ^XTMP("SDES949P-3")
 S COUNT=1
 S ^XTMP("SDES949P-3",COUNT)="*****************************POTENTIAL DISAPPEARING GRIDS REPORT*****************************"
 S COUNT=COUNT+1
 S ^XTMP("SDES949P-3",COUNT)="CLINIC IEN^CLINIC NAME^DESCRIPTION OF ISSUE//LIST OF APPTS ON SEPARATE ROWS"
 ;
 S CLINICIEN=0
 F  S CLINICIEN=$O(^SC(CLINICIEN)) Q:'CLINICIEN  D
 . Q:$$INACTIVE^SDESUTIL(CLINICIEN)
 . Q:$$GET1^DIQ(44,CLINICIEN,2,"I")'="C"
 . ;
 . S CLINICNAME=$$GET1^DIQ(44,CLINICIEN,.01)
 . S HOLSCHED=$S($$GET1^DIQ(44,CLINICIEN,1918.5,"I")="Y":1,1:0)
 . ;
 . F TNODE=0:1:6 I $D(^SC(CLINICIEN,"T"_TNODE)) D
 . . S STARTDATE=$$FMADD^XLFDT(DT,+1)
 . . S STARTDATE=$O(^SC(CLINICIEN,"T"_TNODE,STARTDATE),-1)
 . . I STARTDATE=0 S STARTDATE=$O(^SC(CLINICIEN,"T"_TNODE,STARTDATE))
 . . Q:'STARTDATE
 . . S ENDDATE=$O(^SC(CLINICIEN,"T"_TNODE,STARTDATE))
 . . I ENDDATE="" S ENDDATE=STARTDATE
 . . S PATTERN=^SC(CLINICIEN,"T"_TNODE,ENDDATE,1)
 . . I PATTERN="" D CHECKGRID(CLINICIEN,STARTDATE,ENDDATE,HOLSCHED,TNODE)
 . . F  S STARTDATE=$O(^SC(CLINICIEN,"T"_TNODE,STARTDATE)) Q:'STARTDATE!(ENDDATE=9999999)  D
 . . . S ENDDATE=$O(^SC(CLINICIEN,"T"_TNODE,STARTDATE))
 . . . I ENDDATE="" S ENDDATE=STARTDATE
 . . . S PATTERN=^SC(CLINICIEN,"T"_TNODE,ENDDATE,1)
 . . . I PATTERN="" D CHECKGRID(CLINICIEN,STARTDATE,ENDDATE,HOLSCHED,TNODE)
 Q
 ;
CHECKGRID(CLINICIEN,GRIDDATE,ENDDATE,HOLSCHED,TNODE) ;
 N FOUND
 S FOUND=0
 I GRIDDATE=9999999 S GRIDDATE=DT
 I GRIDDATE<DT S GRIDDATE=DT
 S GRIDDATE=GRIDDATE-.0001
 F  S GRIDDATE=$O(^SC(CLINICIEN,"ST",GRIDDATE)) Q:'GRIDDATE!(GRIDDATE>ENDDATE)  D
 . Q:($$FMTH^XLFDT(GRIDDATE)+4#7)'=TNODE
 . Q:($D(^HOLIDAY(GRIDDATE))&('HOLSCHED))
 . Q:$G(^SC(CLINICIEN,"ST",GRIDDATE,1))'["["
 . Q:$G(^SC(CLINICIEN,"OST",GRIDDATE,1))["["
 . ;
 . I 'FOUND D
 . . S COUNT=COUNT+1,FOUND=1
 . . S ^XTMP("SDES949P-3",COUNT)=CLINICIEN_U_CLINICNAME_U_"The T"_TNODE_" node pattern from "_$$FMTE^XLFDT(STARTDATE,5)_" to "_$$FMTE^XLFDT(ENDDATE,5)
 . . S ^XTMP("SDES949P-3",COUNT)=^XTMP("SDES949P-3",COUNT)_" has been removed, but there is ST node availability starting on "_$$FMTE^XLFDT(GRIDDATE,5)
 . ;
 . N APPTDTTM,APPTIEN,HASAPPTS
 . S APPTDTTM=GRIDDATE-.0001,HASAPPTS=0
 . F  S APPTDTTM=$O(^SC(CLINICIEN,"S",APPTDTTM)) Q:HASAPPTS!('APPTDTTM)!($P(APPTDTTM,".")>GRIDDATE)  D
 . . S APPTIEN=0 F  S APPTIEN=$O(^SC(CLINICIEN,"S",APPTDTTM,1,APPTIEN)) Q:'APPTIEN  D
 . . . Q:$P($G(^SC(CLINICIEN,"S",APPTDTTM,1,APPTIEN,0)),"^",9)="C"
 . . . Q:'$D(^SC(CLINICIEN,"S",APPTDTTM,1,APPTIEN,0))
 . . . S COUNT=COUNT+1,HASAPPTS=1
 . . . S ^XTMP("SDES949P-3",COUNT)="   ... and appointments are scheduled on: "_$$FMTE^XLFDT($P(APPTDTTM,"."),5)
 ;
 Q