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

SDES2GETCANSLOTS.m

Go to the documentation of this file.
  1. SDES2GETCANSLOTS ;ALB/MGD,JAS,BLB - VISTA SCHEDULING RPCS GET CLINIC CANCELLED SLOTS ; May 21, 2024@16:10
  1. ;;5.3;Scheduling;**866,880,893**;Aug 13, 1993;Build 6
  1. ;;Per VHA Directive 6402, this routine should not be modified
  1. ;
  1. ; External References
  1. ; -------------------
  1. ; Reference to $$FIND1^DIC in ICR #2051
  1. ; Reference to $$GET1^DIQ in ICR #2056
  1. ;
  1. Q ;No Direct Call
  1. ;
  1. ; RPC: SDES2 GET CANCELLED SLOTS
  1. ;
  1. GETCANCSLOTS(JSONRETURN,SDCONTEXT,SDCANCDATA) ;
  1. ; This RPC returns cancelled slots within a given timeframe for a given clinic in JSON format.
  1. ; Input:
  1. ; SDCONTEXT("ACHERON AUDIT ID") = Up to 40 Character unique ID number. Ex: 11d9dcc6-c6a2-4785-8031-8261576fca37
  1. ; SDCONTEXT("USER DUZ") = [required] - The DUZ of the user taking action in the calling application.
  1. ; SDCONTEXT("USER SECID") = [optional] - The SECID of the user taking action in the calling application.
  1. ; SDCONTEXT("PATIENT DFN") = [optional] - The DFN/IEN of the target patient from the calling application.
  1. ; SDCONTEXT("PATIENT ICN") = [optional] - The ICN of the target patient from the calling application.
  1. ;
  1. ; SDCANCDATA("CLINICIEN") = [required] - The Internal Entry Number (IEN) from the HOSPITAL LOCATION File #44
  1. ; SDCANCDATA("SDESSTART") = [required] - The Start Date of search in ISO8601 format CCYY-MM-DDTHH:MM-OFFSET
  1. ; SDCANCDATA("SDESENDDATE") = [required] - The End Date of search in ISO8601 format CCYY-MM-DDTHH:MM-OFFSET
  1. ;
  1. ; JSONRETURN = [required] - This is where the retrieved data is stored in JSON format.
  1. ;
  1. N SDGETCANCSLOTS,SDCLNAME,ERROR,SDCLRESIEN,SDTMPARY
  1. S ERROR=0
  1. ; validate context
  1. D VALCONTEXT^SDES2VALCONTEXT(.SDGETCANCSLOTS,.SDCONTEXT)
  1. I $D(SDGETCANCSLOTS) S SDGETCANCSLOTS("CancelledSlots",1)="" D BUILDJSON^SDES2JSON(.JSONRETURN,.SDGETCANCSLOTS) Q
  1. ;
  1. ; validate cancdata input parameters
  1. D VALIDATEINPUT(.SDGETCANCSLOTS,.SDCANCDATA,.ERROR)
  1. I ERROR S SDGETCANCSLOTS("CancelledSlots",1)="" D BUILDJSON^SDES2JSON(.JSONRETURN,.SDGETCANCSLOTS) Q
  1. ;
  1. K SDTMPARY
  1. S SDTMPARY=$NA(^TMP($J,"CLNCANCSLOTS"))
  1. K @SDTMPARY
  1. D GETSLOTS^SDEC57(SDTMPARY,$G(SDCANCDATA("SDCLRESIEN")),$G(SDCANCDATA("SDESSTART")),$G(SDCANCDATA("SDESENDDATE")))
  1. D BUILDDATA(.SDGETCANCSLOTS,.SDCANCDATA,SDTMPARY)
  1. K @SDTMPARY
  1. I ERROR!('$D(SDGETCANCSLOTS("CancelledSlots"))) S SDGETCANCSLOTS("CancelledSlots",1)=""
  1. D BUILDJSON^SDES2JSON(.JSONRETURN,.SDGETCANCSLOTS)
  1. K SDGETCANCSLOTS
  1. Q
  1. ;
  1. VALIDATEINPUT(SDGETCANCSLOTS,SDCANCDATA,ERROR) ;validate input parameters
  1. N CLINICIEN,SDERR,EFLAG,SFLAG,SDESSTART,SDESENDDATE,SDVALERROR
  1. S (SFLAG,EFLAG)=0
  1. ;validate CLINIC IEN
  1. S CLINICIEN=$G(SDCANCDATA("CLINICIEN"))
  1. D VALFILEIEN^SDES2VALUTIL(.SDVALERROR,.SDGETCANCSLOTS,44,CLINICIEN,1,,67,19)
  1. I SDVALERROR=0 S ERROR=1 Q
  1. I +CLINICIEN>0 D Q:ERROR
  1. . S SDCLNAME=$$GET1^DIQ(44,CLINICIEN_",",.01,"I") ;retrieve the clinic name
  1. . I SDCLNAME="" D ERRLOG^SDESJSON(.SDGETCANCSLOTS,80) S ERROR=1 Q ;clinic IEN not found
  1. . S SDCLRESIEN=$$FIND1^DIC(409.831,"","MX",SDCLNAME,"","","SDERR") ;retrieve the resource IEN for the clinic
  1. . I $D(SDERR) D ERRLOG^SDESJSON(.SDGETCANCSLOTS,70) S ERROR=1 Q ;invalid clinic resource id
  1. . S SDCANCDATA("SDCLRESIEN")=SDCLRESIEN
  1. ;
  1. ;validate start date
  1. S SDESSTART=$G(SDCANCDATA("SDESSTART"))
  1. S SDESSTART=$$VALISODTTM^SDES2VALISODTTM(.SDGETCANCSLOTS,SDESSTART,CLINICIEN,1,25,27)
  1. I SDESSTART="" S ERROR=1 Q
  1. I $P(SDESSTART,".",2)="" S ERROR=1 D ERRLOG^SDES2JSON(.SDGETCANCSLOTS,27) Q
  1. S SDCANCDATA("SDESSTARTDTTM")=SDESSTART
  1. S SDCANCDATA("SDESSTART")=$P(SDESSTART,".",1)
  1. ;
  1. ;validate end date
  1. S SDESENDDATE=$G(SDCANCDATA("SDESENDDATE"))
  1. S SDESENDDATE=$$VALISODTTM^SDES2VALISODTTM(.SDGETCANCSLOTS,SDESENDDATE,CLINICIEN,1,26,28)
  1. I SDESENDDATE="" S ERROR=1 Q
  1. I $P(SDESENDDATE,".",2)="" S ERROR=1 D ERRLOG^SDES2JSON(.SDGETCANCSLOTS,28) Q
  1. S SDCANCDATA("SDESENDDTTM")=SDESENDDATE
  1. S SDCANCDATA("SDESENDDATE")=$P(SDESENDDATE,".",1)
  1. ;
  1. ;validate end date after start date
  1. I SDESSTART>SDESENDDATE S ERROR=1 D ERRLOG^SDESJSON(.SDGETCANCSLOTS,242)
  1. Q
  1. ;
  1. BUILDDATA(SDGETCANCSLOTS,SDCANCDATA,SDTMPARY) ; retrieve clinic availability data
  1. N CLINICIEN,SDP1,SDP2,SDP3,SDP4,SDSLOTS,SDSTOPTM,SDSTRTTM,SDTOTAL,II,SDDIV,SDINST,SDAPDTTM,SDCANMSG,SDFIRST,CANCELDATE
  1. I $O(@SDTMPARY@(""))="" Q
  1. S CLINICIEN=$G(SDCANCDATA("CLINICIEN"))
  1. S SDTOTAL=@SDTMPARY@("CNT"),SDFIRST=1
  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<SDCANCDATA("SDESSTARTDTTM"))!(('SDFIRST)&(SDP1>SDCANCDATA("SDESENDDTTM"))) Q
  1. . I SDFIRST,$D(^SC(CLINICIEN,"S",+SDP1))<1 D ; Use first populated slot
  1. . . I II=1 S SDFIRST=0 Q
  1. . . S II=II-1,SDFIRST=0
  1. . . S SDP1=$P(@SDTMPARY@(II),U,2) ; Use first populated slot
  1. . . S SDP2=$P(@SDTMPARY@(II),U,3)
  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. . Q:SDP4'=3 ; Only return cancelled slots
  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 CANCELDATE=$P($$ISOTFM^SDAMUTDT(SDSTRTTM),".")
  1. . S SDSLOTS=$P(@SDTMPARY@(II),U,4)
  1. . S SDSLOTS=$S(SDSLOTS=" ":"",1:SDSLOTS)
  1. . S SDSLOTS=$S(SDP4=3:"X",1:SDSLOTS)
  1. . S SDGETCANCSLOTS("CancelledSlots",II,"BeginTime")=SDSTRTTM
  1. . S SDGETCANCSLOTS("CancelledSlots",II,"EndTime")=SDSTOPTM
  1. . S SDGETCANCSLOTS("CancelledSlots",II,"SlotsAvail")=SDSLOTS
  1. . S SDAPDTTM=+SDP1
  1. . S SDCANMSG=$S($D(^SC(CLINICIEN,"FULL DAY CANCEL",CANCELDATE)):$$GET1^DIQ(44.1902,CANCELDATE_","_CLINICIEN_",",.02),1:$$GET1^DIQ(44.001,SDAPDTTM_","_CLINICIEN_",",1400))
  1. . S SDGETCANCSLOTS("CancelledSlots",II,"CancelMessage")=SDCANMSG
  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 SDGETCANCSLOTS("CancelledSlots",0.1,"Error")="No Timezone set for Clinic."
  1. ..I $$GET1^DIQ(8989.3,1,217,"I")="" S SDGETCANCSLOTS("CancelledSlots",0.2,"Error")="No Timezone set for Institution in Kernel Parameters (#8989.3) file."
  1. ; Changes for 831 end
  1. Q