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

SDESCLINICAVAIL.m

Go to the documentation of this file.
  1. SDESCLINICAVAIL ;ALB/RRM,KML,BWF,MGD,DJS,ANU,MGD,JAS,BWF - VISTA SCHEDULING RPCS GET CLINIC AVAILABILITY ; Jun 21, 2024@14:50
  1. ;;5.3;Scheduling;**800,805,809,816,820,823,826,827,828,831,864,881,889**;Aug 13, 1993;Build 9
  1. ;;Per VHA Directive 6402, this routine should not be modified
  1. ;
  1. ; External References
  1. ; -------------------
  1. ; Reference to ^%DT in ICR #10003
  1. ; Reference to $$FIND1^DIC in ICR #2051
  1. ; Reference to $$GET1^DIQ in ICR #2056
  1. ;
  1. Q ;No Direct Call
  1. ;
  1. GETCLAVAILABLTY(RETURN,CLINICIEN,SDESSTART,SDESENDDATE,SDEAS) ;Called from RPC: SDES GET CLINIC AVAILABILITY
  1. ; This RPC returns available appointment slots within a given timeframe for a given clinic in JSON format.
  1. ; Input:
  1. ; RETURN [required] - This is where the retrieve data is stored in JSON format
  1. ; CLINICIEN [required] - The Internal Entry Number (IEN) from the HOSPITAL LOCATION File #44
  1. ; SDESSTART [required] - The Start Date of search in ISO8601 format CCYY-MM-DDTHH:MM-OFFSET or external format CCYY-MM-DD
  1. ; SDESENDDATE [required] - The End Date of search in ISO8601 format CCYY-MM-DDTHH:MM-OFFSET or external format CCYY-MM-DD
  1. ; SDEAS [optional] - Enterprise Appointment Scheduling (EAS) Tracking Number associated to an appointment.
  1. ;
  1. N SDGETCLAVL,SDCLNAME,ERROR,SDCLRESIEN,SDTMPARY,SDESSTARTDTTM,SDESENDDTTM
  1. S ERROR=0
  1. K RETURN,SDGETCLAVL ;always clear returned data array to ensure a new array of data are returned
  1. D VALIDATEINPUT ;validate input parameters
  1. I 'ERROR D
  1. . K SDTMPARY
  1. . S SDTMPARY=$NA(^TMP($J,"CLNCAVAIL"))
  1. . K @SDTMPARY
  1. . D GETSLOTS^SDEC57(SDTMPARY,SDCLRESIEN,SDESSTART,SDESENDDATE)
  1. . D BUILDDATA(CLINICIEN)
  1. . K @SDTMPARY
  1. I ERROR!('$D(SDGETCLAVL("ClinAvail"))) S SDGETCLAVL("ClinAvail",1)=""
  1. D BUILDJSON
  1. K SDGETCLAVL
  1. Q
  1. ;
  1. VALIDATEINPUT ;validate input parameters
  1. N SDERR,EFLAG,SFLAG
  1. S (SFLAG,EFLAG)=0
  1. ;validate CLINIC IEN
  1. S CLINICIEN=$G(CLINICIEN)
  1. I CLINICIEN="" D ERRLOG^SDESJSON(.SDGETCLAVL,67) S ERROR=1 Q ;clinic cannot be blank
  1. I +CLINICIEN,'$D(^SC(CLINICIEN)) D ERRLOG^SDESJSON(.SDGETCLAVL,19) S ERROR=1 Q ; clinic not found
  1. I +CLINICIEN'>0 D ERRLOG^SDESJSON(.SDGETCLAVL,19) S ERROR=1 Q ; invalid clinic
  1. I +CLINICIEN>0 D
  1. . S SDCLRESIEN=$$GETRES^SDES2UTIL1(CLINICIEN,1)
  1. . I 'SDCLRESIEN D ERRLOG^SDESJSON(.SDGETCLAVL,70) S ERROR=1 ;invalid clinic resource id
  1. ;validate start date
  1. S SDESSTART=$G(SDESSTART)
  1. I SDESSTART="" D ERRLOG^SDESJSON(.SDGETCLAVL,25) S ERROR=1 ;missing begin date/time
  1. I SDESSTART'="",+$G(SDESSTART)'>0 D ERRLOG^SDESJSON(.SDGETCLAVL,27) S ERROR=1 ;invalid begin date
  1. ; If start date is external format, convert to ISO
  1. I $E(SDESSTART,11)'="T" D
  1. . S SDESSTART=$$ISOTFM^SDAMUTDT(SDESSTART,CLINICIEN)
  1. . I SDESSTART'>0 D ERRLOG^SDESJSON(.SDGETCLAVL,27) S ERROR=1 Q
  1. . S SDESSTART=SDESSTART_".000001"
  1. . S SDESSTART=$$FMTISO^SDAMUTDT(SDESSTART,CLINICIEN)
  1. . I SDESSTART'>0 D ERRLOG^SDESJSON(.SDGETCLAVL,27) S ERROR=1 Q
  1. I +SDESSTART>0 D
  1. . S SDESSTART=$$ISOTFM^SDAMUTDT(SDESSTART,CLINICIEN) ;convert ISO format to internal format
  1. . S SDESSTARTDTTM=SDESSTART
  1. . S SDESSTART=$P(SDESSTART,".")
  1. . S SFLAG=1
  1. . I +SDESSTART<1 D ERRLOG^SDESJSON(.SDGETCLAVL,27) S ERROR=1 Q ;invalid begin date/time
  1. . I '$P(SDESSTARTDTTM,".",2) D ERRLOG^SDESJSON(.SDGETCLAVL,27) S ERROR=1 Q ; invalid begin date/time (missing time)
  1. ;validate end date
  1. S SDESENDDATE=$G(SDESENDDATE)
  1. I SDESENDDATE="" D ERRLOG^SDESJSON(.SDGETCLAVL,26) S ERROR=1 ;missing end date/time
  1. I SDESENDDATE'="",+$G(SDESENDDATE)'>0 D ERRLOG^SDESJSON(.SDGETCLAVL,28) S ERROR=1 ;invalid end date
  1. I $E(SDESENDDATE,11)'="T" D
  1. . S SDESENDDATE=$$ISOTFM^SDAMUTDT(SDESENDDATE,CLINICIEN)
  1. . I SDESENDDATE'>0 D ERRLOG^SDESJSON(.SDGETCLAVL,28) S ERROR=1 Q
  1. . S SDESENDDATE=SDESENDDATE_".235959"
  1. . S SDESENDDATE=$$FMTISO^SDAMUTDT(SDESENDDATE,CLINICIEN)
  1. . I SDESENDDATE'>0 D ERRLOG^SDESJSON(.SDGETCLAVL,28) S ERROR=1 Q
  1. I +SDESENDDATE>0 D
  1. . S SDESENDDATE=$$ISOTFM^SDAMUTDT(SDESENDDATE,CLINICIEN) ;convert ISO format to internal format
  1. . S SDESENDDTTM=SDESENDDATE
  1. . S SDESENDDATE=$P(SDESENDDATE,".")
  1. . S EFLAG=1
  1. . I +SDESENDDATE<1 D ERRLOG^SDESJSON(.SDGETCLAVL,28) S ERROR=1 Q ;invalid end date/time
  1. . I '$P(SDESENDDTTM,".",2) D ERRLOG^SDESJSON(.SDGETCLAVL,28) S ERROR=1 Q ; invalid end date/time (missing time)
  1. . I $G(SDESENDDTTM)<$G(SDESSTARTDTTM) D ERRLOG^SDESJSON(.SDGETCLAVL,242) S ERROR=1 Q
  1. ; validate EAS
  1. S SDEAS=$G(SDEAS,"")
  1. I $L(SDEAS) S SDEAS=$$EASVALIDATE^SDESUTIL(SDEAS)
  1. I SDEAS=-1 D ERRLOG^SDESJSON(.SDGETCLAVL,142) S ERROR=1
  1. Q
  1. ;
  1. BUILDDATA(CLINICIEN) ;retrieve clinic availability data
  1. N SDP1,SDP2,SDP3,SDP4,SDSTRTDT,SDENDDT,SDSLOTS,SDSTOPTM,SDSTRTTM,SDTOTAL,II,SDDIV,SDINST
  1. I $O(@SDTMPARY@(""))="" Q
  1. S SDTOTAL=@SDTMPARY@("CNT")
  1. I $P(SDESSTARTDTTM,".",2)="000001" S SDESSTARTDTTM=$P(SDESSTARTDTTM,".")_".000000"
  1. F II=1:1:SDTOTAL D
  1. . S SDP1=$P(@SDTMPARY@(II),U,2) ;start date
  1. . S SDP2=$P(@SDTMPARY@(II),U,3) ;end date
  1. . I (SDP1<SDESSTARTDTTM)!(SDP1>SDESENDDTTM) Q
  1. . S SDP3=+$P(@SDTMPARY@(II),U,4) ;open slots available
  1. . S SDP4=$P(@SDTMPARY@(II),U,5) ;access type (1=available, 2=not available, 3=cancelled)
  1. . I $P(SDP1,".",2)=""!($P(SDP1,".",2)="00") S $P(SDP1,".",2)="0001"
  1. . S SDSTRTTM=$$FMTISO^SDAMUTDT(SDP1,CLINICIEN)
  1. . S SDSTOPTM=$$FMTISO^SDAMUTDT(SDP2,CLINICIEN)
  1. . S SDSLOTS=$P(@SDTMPARY@(II),U,4)
  1. . S SDSLOTS=$S(SDSLOTS=" ":"",1:SDSLOTS)
  1. . S SDSLOTS=$S(SDP4=2:"",SDP4=3:"X",1:SDSLOTS)
  1. . S SDGETCLAVL("ClinAvail",II,"BeginTime")=SDSTRTTM
  1. . S SDGETCLAVL("ClinAvail",II,"EndTime")=SDSTOPTM
  1. . S SDGETCLAVL("ClinAvail",II,"SlotsAvail")=SDSLOTS
  1. ; Changes for 831 start
  1. I $G(CLINICIEN) D
  1. .S SDDIV=$$GET1^DIQ(44,CLINICIEN_",",3.5,"I")
  1. .S:SDDIV SDINST=$$GET1^DIQ(40.8,SDDIV_",",.07,"I")
  1. .I $$GET1^DIQ(4,SDINST,800,"I")="" D
  1. ..S SDGETCLAVL("ClinAvail",0.1,"Error")="No Timezone set for Clinic."
  1. ..I $$GET1^DIQ(8989.3,1,217,"I")="" S SDGETCLAVL("ClinAvail",0.2,"Error")="No Timezone set for Institution in Kernel Parameters (#8989.3) file."
  1. ; Changes for 831 end
  1. Q
  1. ;
  1. BUILDJSON ;Convert data to JSON
  1. N JSONERR
  1. S JSONERR=""
  1. D ENCODE^SDESJSON(.SDGETCLAVL,.RETURN,.JSONERR)
  1. Q