SDES2BLDSUMMOBJ ;ALB/JAS - VISTA SCHEDULING BUILD APPT SUMMARY OBJECT ;MAY 29, 2026
;;5.3;Scheduling;**947**;Aug 13, 1993;Build 3
;;Per VHA Directive 6402, this routine should not be modified
;
Q
;
BUILDAPPTOBJ(APPTOBJ,APPTIEN,RECCNT,ERRORS,SEARCHBY,PATINFO,CLININFO) ;Called from GET APPT RPCs to build appointment object.
N SDDFN,CLINIEN,CANCELID,SDIEN
D GET40984INFO(.APPTOBJ,APPTIEN,.SDDFN,.CLINIEN,.CANCELID,RECCNT)
D:($G(SEARCHBY)'="DFN") GET2INFO(.APPTOBJ,APPTIEN,SDDFN,RECCNT)
I $G(SEARCHBY)="DFN" D
. D:'$D(PATINFO) GET2INFO(.PATINFO,APPTIEN,SDDFN,1)
. M APPTOBJ("ApptSummary",RECCNT,"Patient")=PATINFO("ApptSummary",1,"Patient")
D:($G(SEARCHBY)'="CLINIC") GET44INFO(.APPTOBJ,.CLINIEN,RECCNT)
I $G(SEARCHBY)="CLINIC" D
. D:'$D(CLININFO) GET44INFO(.CLININFO,.CLINIEN,1)
. M APPTOBJ("ApptSummary",RECCNT,"Clinic")=CLININFO("ApptSummary",1,"Clinic")
D GET298INFO(.APPTOBJ,APPTIEN,SDDFN,RECCNT,CLINIEN)
I CLINIEN="" D ERRLOG^SDESJSON(.ERRORS,555,"Appointment IEN "_APPTIEN_". Unable to retrieve Clinic appointment data") Q
S SDIEN=$$GET44RECORDIENS(CLINIEN,APPTOBJ("ApptSummary",RECCNT,"StartTimeFM"),SDDFN,.APPTOBJ)
I 'SDIEN S APPTOBJ("ApptSummary",RECCNT,"OverbookFlag")="" Q
S APPTOBJ("ApptSummary",RECCNT,"OverbookFlag")=$$GET1^DIQ(44.003,SDIEN,9,"I")
S APPTOBJ("ApptSummary",RECCNT,"CheckOutEntered")=$$FMTISO^SDAMUTDT($$GET1^DIQ(44.003,SDIEN,306,"I"))
D REMOVETMP(.APPTOBJ)
Q
;
GET40984INFO(APPTOBJ,APPTIEN,SDDFN,CLINIEN,CANCELID,RECCNT) ;
N IENS,RESOURCEIEN,APPTDATA,APPTSTATDT,ARRAY40984,SDMSG
S IENS=APPTIEN_","
D GETS^DIQ(409.84,IENS,".01;.02;.05;.07;.09;.12;.13;.17;.18;3;4","IE","ARRAY40984","SDMSG")
S RESOURCEIEN=$G(ARRAY40984(409.84,IENS,.07,"I"))
S CLINIEN=$$GET1^DIQ(409.831,RESOURCEIEN,.04,"I")
S SDDFN=$G(ARRAY40984(409.84,IENS,.05,"I"))
S APPTOBJ("ApptSummary",RECCNT,"AppointmentDateTime")=$$FMTISO^SDAMUTDT($G(ARRAY40984(409.84,IENS,.01,"I")),CLINIEN)
S APPTOBJ("ApptSummary",RECCNT,"AppointmentIEN")=APPTIEN
S APPTOBJ("ApptSummary",RECCNT,"DateAppointmentMade")=$$FMTISO^SDAMUTDT($G(ARRAY40984(409.84,IENS,.09,"I")))
S APPTOBJ("ApptSummary",RECCNT,"CancelDateTime")=$$FMTISO^SDAMUTDT($G(ARRAY40984(409.84,IENS,.12,"I")),CLINIEN)
S APPTOBJ("ApptSummary",RECCNT,"Clinic","ClinicIEN")=CLINIEN
S APPTSTATDT=$$APPTSTATUS^SDES2GETSTATUS(APPTIEN,CLINIEN)
S APPTOBJ("ApptSummary",RECCNT,"CurrentStatus")=$P(APPTSTATDT,U)
S APPTOBJ("ApptSummary",RECCNT,"Status")=$P(APPTSTATDT,U)
S APPTOBJ("ApptSummary",RECCNT,"EndTime")=$$FMTISO^SDAMUTDT($G(ARRAY40984(409.84,IENS,.02,"I")),CLINIEN)
S APPTOBJ("ApptSummary",RECCNT,"LengthOfAppt")=$G(ARRAY40984(409.84,IENS,.18,"E"))
S APPTOBJ("ApptSummary",RECCNT,"Walkin")=$G(ARRAY40984(409.84,IENS,.13,"E"))
S APPTOBJ("ApptSummary",RECCNT,"StartTimeFM")=$G(ARRAY40984(409.84,IENS,.01,"I"))
D CHECKINSTEPS(.APPTOBJ,APPTIEN,RECCNT)
Q
;
CHECKINSTEPS(APPTOBJ,APPTIEN,RECCNT) ;
N SDIEN,NUM,DATETIME
S (SDIEN,NUM)=0
F S SDIEN=$O(^SDEC(409.84,APPTIEN,3,SDIEN)) Q:'SDIEN D
.S NUM=NUM+1
.S DATETIME=$$GET1^DIQ(409.843,SDIEN_","_APPTIEN_",",1,"I")
.S APPTOBJ("ApptSummary",RECCNT,"CheckInSteps",NUM,"IEN")=SDIEN
.S APPTOBJ("ApptSummary",RECCNT,"CheckInSteps",NUM,"Status")=$$GET1^DIQ(409.843,SDIEN_","_APPTIEN_",",.01,"E")
.S APPTOBJ("ApptSummary",RECCNT,"CheckInSteps",NUM,"DateTime")=$$FMTISO^SDAMUTDT(DATETIME)
I '$D(APPTOBJ("ApptSummary",RECCNT,"CheckInSteps")) S APPTOBJ("ApptSummary",RECCNT,"CheckInSteps",1)=""
Q
;
GET2INFO(APPTOBJ,APPTIEN,SDDFN,RECCNT) ;
S APPTOBJ("ApptSummary",RECCNT,"Patient","DFN")=SDDFN
S APPTOBJ("ApptSummary",RECCNT,"Patient","ICN")=$$GETPATICN^SDESINPUTVALUTL(SDDFN)
S APPTOBJ("ApptSummary",RECCNT,"Patient","DateOfDeath")=$$FMTISO^SDAMUTDT($$GET1^DIQ(2,SDDFN_",",.351,"I"))
S APPTOBJ("ApptSummary",RECCNT,"Patient","Name")=$$GET1^DIQ(2,SDDFN_",",.01,"E")
Q
;
GET44INFO(APPTOBJ,CLINIEN,RECCNT) ;
N CLINIENS,ARRAY44
S CLINIENS=CLINIEN_","
D GETS^DIQ(44,CLINIENS,".01;3.5;2500","IE","ARRAY44","SDMSG")
S APPTOBJ("ApptSummary",RECCNT,"Clinic","Name")=$G(ARRAY44(44,CLINIENS,.01,"E"))
S APPTOBJ("ApptSummary",RECCNT,"Clinic","ProhibitedClinic")=$S($G(ARRAY44(44,CLINIENS,2500,"E"))="YES":1,1:0)
;
N DIVISION,INSTITUTION,TIMEZONEIEN
S DIVISION=$G(ARRAY44(44,CLINIENS,3.5,"I"))
S INSTITUTION=$$GET1^DIQ(40.8,DIVISION,.07,"I")
S TIMEZONEIEN=$$GET1^DIQ(4,INSTITUTION,800,"I")
I TIMEZONEIEN="" D BLANKTIMEZONE(.APPTOBJ,RECCNT) Q
S APPTOBJ("ApptSummary",RECCNT,"Clinic","TimeZone")=$$GET1^DIQ(4,INSTITUTION,800,"E")
S APPTOBJ("ApptSummary",RECCNT,"Clinic","TimeZoneException")=$$GET1^DIQ(4,INSTITUTION,802,"E")
Q
;
BLANKTIMEZONE(APPTOBJ,RECCNT) ;
S APPTOBJ("ApptSummary",RECCNT,"Clinic","TimeZone")=""
S APPTOBJ("ApptSummary",RECCNT,"Clinic","TimeZoneException")=""
Q
;
GET298INFO(APPTOBJ,APPTIEN,SDDFN,RECCNT,CLINIEN) ;
N PATIENS
S PATIENS=APPTOBJ("ApptSummary",RECCNT,"StartTimeFM")_","_SDDFN_","
S APPTOBJ("ApptSummary",RECCNT,"InpatientFlag")=$S($$GET1^DIQ(2.98,PATIENS,3,"I")="I":1,1:0)
Q
;
GET44RECORDIENS(CLINICIEN,APPTSTARTTIME,SDDFN,APPTOBJ) ;
;want to process through until we get to the correct appointment for time and clinic
N FOUND,IENS44003,SUBIEN,APPTCNT,MATCH,CHECKIEN
S FOUND=0,APPTCNT=0
S SUBIEN=0 F S SUBIEN=$O(^SC(CLINICIEN,"S",APPTSTARTTIME,1,SUBIEN)) Q:'SUBIEN!($G(FOUND)=1) D
.I $$GET1^DIQ(44.003,SUBIEN_","_APPTSTARTTIME_","_CLINICIEN_",",.01,"I")=SDDFN D
.. S CHECKIEN=SUBIEN_","_APPTSTARTTIME_","_CLINICIEN_","
.. S MATCH=$$MATCHAPPOINTMENT(.APPTOBJ,CHECKIEN)
.. Q:'MATCH
..S APPTCNT=APPTCNT+1
..S IENS44003=SUBIEN_","_APPTSTARTTIME_","_CLINICIEN_",",FOUND=1 Q
Q $G(IENS44003)
;
MATCHAPPOINTMENT(APPTOBJ,CHECKIEN) ;
Q:(APPTOBJ("ApptSummary",RECCNT,"CancelDateTime")="")&($$GET1^DIQ(44.003,CHECKIEN,310,"I")="C") 0
Q 1
;
REMOVETMP(APPTOBJ) ;
K APPTOBJ("ApptSummary",RECCNT,"CancelDateTime")
K APPTOBJ("ApptSummary",RECCNT,"StartTimeFM")
Q
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HSDES2BLDSUMMOBJ 5961 printed Aug 20, 2026@00:04:19 Page 2
SDES2BLDSUMMOBJ ;ALB/JAS - VISTA SCHEDULING BUILD APPT SUMMARY OBJECT ;MAY 29, 2026
+1 ;;5.3;Scheduling;**947**;Aug 13, 1993;Build 3
+2 ;;Per VHA Directive 6402, this routine should not be modified
+3 ;
+4 QUIT
+5 ;
BUILDAPPTOBJ(APPTOBJ,APPTIEN,RECCNT,ERRORS,SEARCHBY,PATINFO,CLININFO) ;Called from GET APPT RPCs to build appointment object.
+1 NEW SDDFN,CLINIEN,CANCELID,SDIEN
+2 DO GET40984INFO(.APPTOBJ,APPTIEN,.SDDFN,.CLINIEN,.CANCELID,RECCNT)
+3 if ($GET(SEARCHBY)'="DFN")
DO GET2INFO(.APPTOBJ,APPTIEN,SDDFN,RECCNT)
+4 IF $GET(SEARCHBY)="DFN"
Begin DoDot:1
+5 if '$DATA(PATINFO)
DO GET2INFO(.PATINFO,APPTIEN,SDDFN,1)
+6 MERGE APPTOBJ("ApptSummary",RECCNT,"Patient")=PATINFO("ApptSummary",1,"Patient")
End DoDot:1
+7 if ($GET(SEARCHBY)'="CLINIC")
DO GET44INFO(.APPTOBJ,.CLINIEN,RECCNT)
+8 IF $GET(SEARCHBY)="CLINIC"
Begin DoDot:1
+9 if '$DATA(CLININFO)
DO GET44INFO(.CLININFO,.CLINIEN,1)
+10 MERGE APPTOBJ("ApptSummary",RECCNT,"Clinic")=CLININFO("ApptSummary",1,"Clinic")
End DoDot:1
+11 DO GET298INFO(.APPTOBJ,APPTIEN,SDDFN,RECCNT,CLINIEN)
+12 IF CLINIEN=""
DO ERRLOG^SDESJSON(.ERRORS,555,"Appointment IEN "_APPTIEN_". Unable to retrieve Clinic appointment data")
QUIT
+13 SET SDIEN=$$GET44RECORDIENS(CLINIEN,APPTOBJ("ApptSummary",RECCNT,"StartTimeFM"),SDDFN,.APPTOBJ)
+14 IF 'SDIEN
SET APPTOBJ("ApptSummary",RECCNT,"OverbookFlag")=""
QUIT
+15 SET APPTOBJ("ApptSummary",RECCNT,"OverbookFlag")=$$GET1^DIQ(44.003,SDIEN,9,"I")
+16 SET APPTOBJ("ApptSummary",RECCNT,"CheckOutEntered")=$$FMTISO^SDAMUTDT($$GET1^DIQ(44.003,SDIEN,306,"I"))
+17 DO REMOVETMP(.APPTOBJ)
+18 QUIT
+19 ;
GET40984INFO(APPTOBJ,APPTIEN,SDDFN,CLINIEN,CANCELID,RECCNT) ;
+1 NEW IENS,RESOURCEIEN,APPTDATA,APPTSTATDT,ARRAY40984,SDMSG
+2 SET IENS=APPTIEN_","
+3 DO GETS^DIQ(409.84,IENS,".01;.02;.05;.07;.09;.12;.13;.17;.18;3;4","IE","ARRAY40984","SDMSG")
+4 SET RESOURCEIEN=$GET(ARRAY40984(409.84,IENS,.07,"I"))
+5 SET CLINIEN=$$GET1^DIQ(409.831,RESOURCEIEN,.04,"I")
+6 SET SDDFN=$GET(ARRAY40984(409.84,IENS,.05,"I"))
+7 SET APPTOBJ("ApptSummary",RECCNT,"AppointmentDateTime")=$$FMTISO^SDAMUTDT($GET(ARRAY40984(409.84,IENS,.01,"I")),CLINIEN)
+8 SET APPTOBJ("ApptSummary",RECCNT,"AppointmentIEN")=APPTIEN
+9 SET APPTOBJ("ApptSummary",RECCNT,"DateAppointmentMade")=$$FMTISO^SDAMUTDT($GET(ARRAY40984(409.84,IENS,.09,"I")))
+10 SET APPTOBJ("ApptSummary",RECCNT,"CancelDateTime")=$$FMTISO^SDAMUTDT($GET(ARRAY40984(409.84,IENS,.12,"I")),CLINIEN)
+11 SET APPTOBJ("ApptSummary",RECCNT,"Clinic","ClinicIEN")=CLINIEN
+12 SET APPTSTATDT=$$APPTSTATUS^SDES2GETSTATUS(APPTIEN,CLINIEN)
+13 SET APPTOBJ("ApptSummary",RECCNT,"CurrentStatus")=$PIECE(APPTSTATDT,U)
+14 SET APPTOBJ("ApptSummary",RECCNT,"Status")=$PIECE(APPTSTATDT,U)
+15 SET APPTOBJ("ApptSummary",RECCNT,"EndTime")=$$FMTISO^SDAMUTDT($GET(ARRAY40984(409.84,IENS,.02,"I")),CLINIEN)
+16 SET APPTOBJ("ApptSummary",RECCNT,"LengthOfAppt")=$GET(ARRAY40984(409.84,IENS,.18,"E"))
+17 SET APPTOBJ("ApptSummary",RECCNT,"Walkin")=$GET(ARRAY40984(409.84,IENS,.13,"E"))
+18 SET APPTOBJ("ApptSummary",RECCNT,"StartTimeFM")=$GET(ARRAY40984(409.84,IENS,.01,"I"))
+19 DO CHECKINSTEPS(.APPTOBJ,APPTIEN,RECCNT)
+20 QUIT
+21 ;
CHECKINSTEPS(APPTOBJ,APPTIEN,RECCNT) ;
+1 NEW SDIEN,NUM,DATETIME
+2 SET (SDIEN,NUM)=0
+3 FOR
SET SDIEN=$ORDER(^SDEC(409.84,APPTIEN,3,SDIEN))
if 'SDIEN
QUIT
Begin DoDot:1
+4 SET NUM=NUM+1
+5 SET DATETIME=$$GET1^DIQ(409.843,SDIEN_","_APPTIEN_",",1,"I")
+6 SET APPTOBJ("ApptSummary",RECCNT,"CheckInSteps",NUM,"IEN")=SDIEN
+7 SET APPTOBJ("ApptSummary",RECCNT,"CheckInSteps",NUM,"Status")=$$GET1^DIQ(409.843,SDIEN_","_APPTIEN_",",.01,"E")
+8 SET APPTOBJ("ApptSummary",RECCNT,"CheckInSteps",NUM,"DateTime")=$$FMTISO^SDAMUTDT(DATETIME)
End DoDot:1
+9 IF '$DATA(APPTOBJ("ApptSummary",RECCNT,"CheckInSteps"))
SET APPTOBJ("ApptSummary",RECCNT,"CheckInSteps",1)=""
+10 QUIT
+11 ;
GET2INFO(APPTOBJ,APPTIEN,SDDFN,RECCNT) ;
+1 SET APPTOBJ("ApptSummary",RECCNT,"Patient","DFN")=SDDFN
+2 SET APPTOBJ("ApptSummary",RECCNT,"Patient","ICN")=$$GETPATICN^SDESINPUTVALUTL(SDDFN)
+3 SET APPTOBJ("ApptSummary",RECCNT,"Patient","DateOfDeath")=$$FMTISO^SDAMUTDT($$GET1^DIQ(2,SDDFN_",",.351,"I"))
+4 SET APPTOBJ("ApptSummary",RECCNT,"Patient","Name")=$$GET1^DIQ(2,SDDFN_",",.01,"E")
+5 QUIT
+6 ;
GET44INFO(APPTOBJ,CLINIEN,RECCNT) ;
+1 NEW CLINIENS,ARRAY44
+2 SET CLINIENS=CLINIEN_","
+3 DO GETS^DIQ(44,CLINIENS,".01;3.5;2500","IE","ARRAY44","SDMSG")
+4 SET APPTOBJ("ApptSummary",RECCNT,"Clinic","Name")=$GET(ARRAY44(44,CLINIENS,.01,"E"))
+5 SET APPTOBJ("ApptSummary",RECCNT,"Clinic","ProhibitedClinic")=$SELECT($GET(ARRAY44(44,CLINIENS,2500,"E"))="YES":1,1:0)
+6 ;
+7 NEW DIVISION,INSTITUTION,TIMEZONEIEN
+8 SET DIVISION=$GET(ARRAY44(44,CLINIENS,3.5,"I"))
+9 SET INSTITUTION=$$GET1^DIQ(40.8,DIVISION,.07,"I")
+10 SET TIMEZONEIEN=$$GET1^DIQ(4,INSTITUTION,800,"I")
+11 IF TIMEZONEIEN=""
DO BLANKTIMEZONE(.APPTOBJ,RECCNT)
QUIT
+12 SET APPTOBJ("ApptSummary",RECCNT,"Clinic","TimeZone")=$$GET1^DIQ(4,INSTITUTION,800,"E")
+13 SET APPTOBJ("ApptSummary",RECCNT,"Clinic","TimeZoneException")=$$GET1^DIQ(4,INSTITUTION,802,"E")
+14 QUIT
+15 ;
BLANKTIMEZONE(APPTOBJ,RECCNT) ;
+1 SET APPTOBJ("ApptSummary",RECCNT,"Clinic","TimeZone")=""
+2 SET APPTOBJ("ApptSummary",RECCNT,"Clinic","TimeZoneException")=""
+3 QUIT
+4 ;
GET298INFO(APPTOBJ,APPTIEN,SDDFN,RECCNT,CLINIEN) ;
+1 NEW PATIENS
+2 SET PATIENS=APPTOBJ("ApptSummary",RECCNT,"StartTimeFM")_","_SDDFN_","
+3 SET APPTOBJ("ApptSummary",RECCNT,"InpatientFlag")=$SELECT($$GET1^DIQ(2.98,PATIENS,3,"I")="I":1,1:0)
+4 QUIT
+5 ;
GET44RECORDIENS(CLINICIEN,APPTSTARTTIME,SDDFN,APPTOBJ) ;
+1 ;want to process through until we get to the correct appointment for time and clinic
+2 NEW FOUND,IENS44003,SUBIEN,APPTCNT,MATCH,CHECKIEN
+3 SET FOUND=0
SET APPTCNT=0
+4 SET SUBIEN=0
FOR
SET SUBIEN=$ORDER(^SC(CLINICIEN,"S",APPTSTARTTIME,1,SUBIEN))
if 'SUBIEN!($GET(FOUND)=1)
QUIT
Begin DoDot:1
+5 IF $$GET1^DIQ(44.003,SUBIEN_","_APPTSTARTTIME_","_CLINICIEN_",",.01,"I")=SDDFN
Begin DoDot:2
+6 SET CHECKIEN=SUBIEN_","_APPTSTARTTIME_","_CLINICIEN_","
+7 SET MATCH=$$MATCHAPPOINTMENT(.APPTOBJ,CHECKIEN)
+8 if 'MATCH
QUIT
+9 SET APPTCNT=APPTCNT+1
+10 SET IENS44003=SUBIEN_","_APPTSTARTTIME_","_CLINICIEN_","
SET FOUND=1
QUIT
End DoDot:2
End DoDot:1
+11 QUIT $GET(IENS44003)
+12 ;
MATCHAPPOINTMENT(APPTOBJ,CHECKIEN) ;
+1 if (APPTOBJ("ApptSummary",RECCNT,"CancelDateTime")="")&($$GET1^DIQ(44.003,CHECKIEN,310,"I")="C")
QUIT 0
+2 QUIT 1
+3 ;
REMOVETMP(APPTOBJ) ;
+1 KILL APPTOBJ("ApptSummary",RECCNT,"CancelDateTime")
+2 KILL APPTOBJ("ApptSummary",RECCNT,"StartTimeFM")
+3 QUIT
+4 ;