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

SDESGETAPPTWRAP.m

Go to the documentation of this file.
  1. SDESGETAPPTWRAP ;ALB/RRM - RPC WRAPPER FOR VIEWING AN APPOINTMENT ;APR 12, 2022@13:47
  1. ;;5.3;Scheduling;**814**;Aug 13, 1993;Build 11
  1. ;;Per VHA Directive 6402, this routine should not be modified
  1. ;
  1. ;
  1. Q ;No Direct Call
  1. ;
  1. ; The parameter list for this RPC must be kept in sync.
  1. ; If you need to add or remove a parameter, ensure that the Remote Procedure File #8994 definition is also updated.
  1. ;
  1. ;This is the entry point to retrieve appointments from (not in particular order):
  1. ; - HOSPITAL LOCATION File #44
  1. ; - PATIENT File #2, and
  1. ; - SDEC APPOINTMENT File #409.84
  1. ;
  1. ; Called from the following RPC:
  1. ; - SDES GET APPTS BY CLINIC #44
  1. ; - SDES GET APPTS BY DFN #2
  1. GETAPPTS(RETURNJSON,SDPOINTERIEN,SDBEGDATE,SDENDDATE) ;
  1. ;
  1. ; Input:
  1. ; SDPOINTERIEN [Required] = This can be a patient's DFN from PATIENT File #2 or the Internal Entry Number (IEN) from HOSPITAL LOCATION FILE #44.
  1. ; SDBEGDATE [Required] = The beginning date/time in ISO8601 Time Format for the search.
  1. ; SDENDDATE [Required] = The ending date/time in ISO8601 Time Format for the search.
  1. ;
  1. ; Output:
  1. ; RETURNJSON = Returns fields from the (not in particular order) HOSPITAL LOCATION File #44, PATIENT File #2, and SDEC APPOINTMENT File #409.84
  1. ; in JSON format. JSON Errors will be returned for any invalid/missing parameters.
  1. ;
  1. N ERRORS,RETURNERROR ;temp data storage for input validation error
  1. N SDAPPT40984 ;temp data storage for File #409.84
  1. N SDAPPT44 ;temp data storage for File #44
  1. N SDAPPTMULT2 ;temp data storage for Appointment Multiple File #2
  1. N SDALLAPPTARY ;temp data storage for all records found in the HOSPITAL LOCATION File #44, PATIENT File #2, and SDEC APPOINTMENT File #409.84
  1. N SDDFN,SDCLINICIEN,HASDFNERRORS,HASCLINIENERRORS,HASBEGDATEERRORS,HASENDDATEERRORS
  1. ;
  1. ;NOTE: Ensure that before calling this routine the SDVIEWAPPTBY variable is set to either 0 OR 1
  1. ; 0 - View Appointment using DFN
  1. ; 1 - View Appointment using CLINIC IEN
  1. ;
  1. S ERRORFLAG=0
  1. ;Input parameters validation begins here
  1. I $G(SDVIEWAPPTBY)=0 D ;DFN input parameter validation
  1. . S SDDFN=SDPOINTERIEN
  1. . S HASDFNERRORS=$$VALIDATEPTDFN(.ERRORS,SDDFN)
  1. . I HASDFNERRORS M RETURNERROR=ERRORS
  1. ;
  1. I $G(SDVIEWAPPTBY)=1 D ;CLINIC IEN input parameter validation
  1. . S SDCLINICIEN=SDPOINTERIEN
  1. . S HASCLINIENERRORS=$$VALIDATECLINIC(.ERRORS,SDCLINICIEN)
  1. . I HASCLINIENERRORS M RETURNERROR=ERRORS
  1. ;
  1. ;convert beginning and ending date time to Fileman Format
  1. S:$G(SDBEGDATE)'="" SDBEGDATE=$$ISOTFM^SDAMUTDT(SDBEGDATE)
  1. S:$G(SDENDDATE)'="" SDENDDATE=$$ISOTFM^SDAMUTDT(SDENDDATE)
  1. ;
  1. S HASBEGDATEERRORS=$$VALIDATEBEGDATE(.ERRORS,SDBEGDATE) ;SDBEGDATE input parameter validation
  1. I HASBEGDATEERRORS M RETURNERROR=ERRORS
  1. ;
  1. S HASENDDATEERRORS=$$VALIDATEENDDATE(.ERRORS,SDENDDATE) ;SDENDDATE input parameter validation
  1. I HASENDDATEERRORS M RETURNERROR=ERRORS
  1. ;Input parameters validation ends here
  1. ;
  1. I $O(RETURNERROR("Error",""))'="" D BUILDJSON(.RETURNERROR,.RETURNJSON) Q ;do not continue processing if errors are detected
  1. ;
  1. K RETURNJSON,SDAPPT40984,SDAPPT44,SDAPPTMULT2 ;always clear returned data to ensure a new array of data are returned
  1. ;
  1. I $G(SDVIEWAPPTBY)=0 D GETAPPTBYDFN(SDDFN,SDBEGDATE,SDENDDATE) ;view appointment using DFN of the patient
  1. I $G(SDVIEWAPPTBY)=1 D GETAPPTBYCLIN(SDCLINICIEN,SDBEGDATE,SDENDDATE) ;view appointment using Clinic IEN
  1. ;
  1. ;Merge the three retrieved appointments into one big array
  1. D MERGEALLAPPT(.SDALLAPPTARY,.SDAPPT40984,.SDAPPT44,.SDAPPTMULT2)
  1. ;
  1. D BUILDJSON(.SDALLAPPTARY,.RETURNJSON)
  1. D CLEANUP
  1. Q
  1. ;
  1. VALIDATEPTDFN(ERRORS,SDDFN) ;Validate patient DFN
  1. N ERRORFLAG
  1. S ERRORFLAG=$$VALIDATEPTDFN^SDESGETPATAPPT(.ERRORS,SDDFN)
  1. Q ERRORFLAG
  1. ;
  1. VALIDATECLINIC(ERRORS,SDCLINICIEN) ;Validate Clinic
  1. N ERRORFLAG
  1. S ERRORFLAG=$$VALIDATECLINIC^SDESGETPATAPPT(.ERRORS,SDCLINICIEN)
  1. Q ERRORFLAG
  1. ;
  1. VALIDATEBEGDATE(ERRORS,SDBEGDATE) ;Validate Beginning Date
  1. N ERRORFLAG
  1. I $G(SDBEGDATE)="" D ERRLOG^SDESJSON(.ERRORS,25) S ERRORFLAG=1 Q ERRORFLAG
  1. S ERRORFLAG=$$VALIDATEBEGDT^SDESPRINTPATAPPT(.ERRORS,SDBEGDATE)
  1. Q ERRORFLAG
  1. ;
  1. VALIDATEENDDATE(ERRORS,SDENDDATE) ;Validate ENding Date
  1. N ERRORFLAG
  1. I SDENDDATE="" D ERRLOG^SDESJSON(.ERRORS,26) S ERRORFLAG=1 Q ERRORFLAG
  1. S ERRORFLAG=$$VALIDATEENDDT^SDESPRINTPATAPPT(.ERRORS,SDENDDATE)
  1. Q ERRORFLAG
  1. ;
  1. GETAPPTBYDFN(DFN,SDBEG,SDEND) ;View Appointment using DFN of the patient
  1. N SDCLINICARY
  1. D GETAPPT40984(DFN,SDBEG,SDEND) ;retrieves appointment from File #409.84
  1. ;SDCLINICARY is set while retrieving the appointments from File #409.84 in GETAPPT40984 line tag
  1. D LOOPCLINICARY(.SDCLINICARY,SDBEG,SDEND) ;retrieves appointment from File #44
  1. D GETAPPT2(DFN,SDBEG,SDEND) ;retrieves appointment from Appointment Multiple Patient File #2
  1. Q
  1. ;
  1. GETAPPTBYCLIN(SDCLINICIEN,SDBEGDATE,SDENDDATE) ;View Appointment using Clinic IEN
  1. N PATDFNARY
  1. D GETAPPT44(SDCLINICIEN,SDBEGDATE,SDENDDATE) ;Retrieves appointments in File #44
  1. ;PATDFNARY array is created while retrieving appointments from File #44 in GETAPPT44 line tag
  1. ;PATDFNARY will be use to retrieve appointments from Appointment Multiple PATIENT File #2 and File #409.84
  1. I $D(PATDFNARY) D
  1. . S DFN="" F S DFN=$O(PATDFNARY(DFN)) Q:DFN="" D
  1. . . D GETAPPT40984(DFN,SDBEGDATE,SDENDDATE) ;retrieves appointment from File #409.84
  1. . . D GETAPPT2(DFN,SDBEGDATE,SDENDDATE) ;retrieve appointments from Appointment Multiple PATIENT File #2
  1. Q
  1. ;
  1. GETAPPT40984(DFN,BDATE,EDATE) ;Traverse the "CPAT" cross reference in File #409.84 to retrieve appointments for a given datetime range
  1. N APPTIEN,APPTDATA,RECNUM,CLINICIEN
  1. S RECNUM=0
  1. S APPTIEN=0 F S APPTIEN=$O(^SDEC(409.84,"CPAT",DFN,APPTIEN)) Q:'APPTIEN D
  1. . K SDMSG
  1. . I '$$APPTINDTRANGE^SDESAPPT(APPTIEN,BDATE,EDATE) Q
  1. . D SUMMARY^SDESAPPTDATA(.APPTDATA,APPTIEN)
  1. . I $G(SDVIEWAPPTBY)=1,$G(APPTDATA("Resource","ClinicIEN"))'=SDCLINICIEN Q ;if view appointment by Clinic IEN, we are only interested of those Clinic IEN passed in
  1. . S RECNUM=RECNUM+1
  1. . S APPTDATA("AppointmentType")=$$GET1^DIQ(409.84,APPTIEN_",",.06)
  1. . I $D(APPTDATA) D
  1. . . M SDAPPT40984("PatientAppt","File#409.84",RECNUM)=APPTDATA
  1. . . I $G(SDVIEWAPPTBY)=0 D
  1. . . . S CLINICIEN=$G(APPTDATA("Resource","ClinicIEN"))
  1. . . . I $G(CLINICIEN)'="" S SDCLINICARY(CLINICIEN)="" ;this will use later when retrieving the appointments in File #44
  1. I $O(SDAPPT40984("PatientAppt","File#409.84",""))="" S SDAPPT40984("PatientAppt","File#409.84")="" ;if no record found, set the array into a null value
  1. Q
  1. ;
  1. LOOPCLINICARY(SDCLINICARY,SDBEG,SDEND) ;Retrieve appointments from File #44
  1. N CLINICIEN
  1. S CLINICIEN="" F S CLINICIEN=$O(SDCLINICARY(CLINICIEN)) Q:CLINICIEN="" D GETAPPT44(CLINICIEN,SDBEG,SDEND)
  1. Q
  1. ;
  1. GETAPPT44(SDCLINICIEN,BDATE,EDATE) ;Traverse the "S" node in HOSPITAL LOCATION File #44 to retrieve appointments for a given datetime range
  1. N APPDATETIME,APPTREC,SDAPPTNO,SDIEN,SDAPPT,SDMSG,SDSTDT,SDCLIN,FOUND,NUM,SDCLINDFN
  1. S NUM=0
  1. S APPDATETIME=$$FMADD^XLFDT(BDATE,-1) ;always start the previous date in order to get the needed date range
  1. F S APPDATETIME=$O(^SC(SDCLINICIEN,"S",APPDATETIME)) Q:(APPDATETIME="")!(APPDATETIME>EDATE) D
  1. . Q:APPDATETIME<BDATE
  1. . S SDAPPTNO=0 F S SDAPPTNO=$O(^SC(SDCLINICIEN,"S",APPDATETIME,1,SDAPPTNO)) Q:SDAPPTNO="" D
  1. . . I '$D(^SC(SDCLINICIEN,"S",APPDATETIME,1,SDAPPTNO,0)) Q
  1. . . S SDIEN=SDAPPTNO_","_APPDATETIME_","_SDCLINICIEN_","
  1. . . S SDCLINDFN=$$GET1^DIQ(44.003,SDIEN,.01,"I")
  1. . . Q:'$D(^DPT(SDCLINDFN,"S",APPDATETIME,0))
  1. . . K SDMSG,SDAPPT D GETS^DIQ(44.003,SDIEN,"**","IE","SDAPPT","SDMSG")
  1. . . Q:$D(SDMSG)
  1. . . I $G(SDVIEWAPPTBY)=0,$G(SDAPPT(44.003,SDIEN,.01,"I"))'=DFN Q ;if view appointment by DFN, we are only interested of those DFN's passed in
  1. . . S SDSTDT=APPDATETIME
  1. . . S SDCLIN=SDCLINICIEN
  1. . . S NUM=NUM+1
  1. . . D BLDREC^SDESGETCLINAPPT
  1. . . I $D(APPTREC) M SDAPPT44("PatientAppt","File#44",NUM)=APPTREC("ClinicApptDate",SDSTDT)
  1. . . I $G(SDVIEWAPPTBY)=1 S PATDFNARY(SDAPPT(44.003,SDIEN,.01,"I"))="" ;will be used later to retrieve appointments from the appointment multiple in File #2
  1. I $O(SDAPPT44("PatientAppt","File#44",""))="" S SDAPPT44("PatientAppt","File#44")="" ;if no record found, set the array into a null value
  1. Q
  1. ;
  1. GETAPPT2(DFN,BDATE,EDATE) ;Traverse the "S" node in Appointment Multiple Patient File #2 to retrieve appointments for a given datetime range
  1. N APPT,APPDATETIME,SDPATAPPT,SDMSG,ERR,NUM
  1. S NUM=0
  1. S APPDATETIME=$$FMADD^XLFDT(BDATE,-1) ;always start the previous date in order to get the needed date range
  1. F S APPDATETIME=$O(^DPT(DFN,"S",APPDATETIME)) Q:(APPDATETIME="")!(APPDATETIME>EDATE) D
  1. . Q:APPDATETIME<BDATE
  1. . I $G(SDVIEWAPPTBY)=1,$$GET1^DIQ(2.98,APPDATETIME_","_DFN_",",.01,"I")'=SDCLINICIEN Q ;if view appointment by Clinic IEN, we are only interested of those Clinic IEN passed in
  1. . K SDMSG,ERR
  1. . S NUM=NUM+1
  1. . S APPT=$$GETAPPT^SDESGETPATAPPT(.SDPATAPPT,$G(DFN),APPDATETIME)
  1. . Q:$D(ERR)
  1. . I $G(APPT) M SDAPPTMULT2("PatientAppt","File#2.98",NUM)=SDPATAPPT("PatientAppt",NUM)
  1. I $O(SDAPPTMULT2("PatientAppt","File#2.98",""))="" S SDAPPTMULT2("PatientAppt","File#2.98")="" ;if no record found, set the array into a null value
  1. Q
  1. ;
  1. MERGEALLAPPT(SDALLAPPTARY,SDAPPT40984,SDAPPT44,SDAPPTMULT2) ;Merge all appointments(409.84, 44, and 2.98) altogther into one big array
  1. M SDALLAPPTARY=SDAPPT40984
  1. M SDALLAPPTARY=SDAPPT44
  1. M SDALLAPPTARY=SDAPPTMULT2
  1. Q
  1. ;
  1. BUILDJSON(RETURNJSON,INPUT) ; Build JSON format
  1. N JSONERROR
  1. S JSONERROR=""
  1. D ENCODE^XLFJSON("RETURNJSON","INPUT","JSONERROR")
  1. Q
  1. ;
  1. CLEANUP ;
  1. K RETURNERROR,SDALLAPPTARY,SDBEG,SDEND,ERRORFLAG,HASDFNERRORS,HASCLINIENERRORS,ERRORS
  1. K SDMSG,FOUND,ERR,SDCLINICIEN,SDDFN,SDVIEWAPPTBY,HASBEGDATEERRORS,HASENDDATEERRORS
  1. Q
  1. ;