SDESCREATEAPPT  ;ALB/BLB,MGD,DJS,ANU,BLB,TJB,BLB/TJB,LAB,TJB - CREATE APPOINTMENT RPC; JUN 17, 2024
 ;;5.3;Scheduling;**814,823,826,827,828,842,843,846,847,851,853,869,877,881**;Aug 13, 1993;Build 10
 ;;Per VHA Directive 6402, this routine should not be modified
 ;
 ;----------------- ----------------- ----------
 ;
 Q
 ;
 ; create appt in file 409.84. Called from wrapper level SDESCRTAPPTWRAP. See SDESCRTAPPTWRAP for required inputs.
 ;
VALIDATE(ERRORS,ARY84,ARY44) ; Validate input
 N MAXDAYS,SDECRNOD,RESOURCED,ENCOUNTER,REQUESTIEN,SDCONERR,SDAPPTSTARTDATE,IEN,TYPEIEN,TIMEDIFF
 ;
 ; appointment Start Date and Time
 S ARY84("SDAPPTSTARTDTTM")=$G(ARY84("SDAPPTSTARTDTTM"),"")
 I ARY84("SDAPPTSTARTDTTM")="" D ERRLOG^SDESJSON(.ERRORS,165) Q
 I $P($G(ARY84("SDAPPTSTARTDTTM")),"T",2)="" D ERRLOG^SDESJSON(.ERRORS,166) Q  ;ISSUE INVALID ERROR MESSAGE IF NO TIME ENTERED
 S ARY84("SDAPPTSTARTDTTM")=$$ISOTFM^SDAMUTDT(ARY84("SDAPPTSTARTDTTM"),ARY84("CLINICIEN"))
 I ARY84("SDAPPTSTARTDTTM")=-1 D ERRLOG^SDESJSON(.ERRORS,166) Q
 ;
 ; appointment End Date and Time
 S ARY84("SDAPPTENDDTTM")=$G(ARY84("SDAPPTENDDTTM"),"")
 I ARY84("SDAPPTENDDTTM")="" D ERRLOG^SDESJSON(.ERRORS,167) Q
 I $P($G(ARY84("SDAPPTENDDTTM")),"T",2)="" D ERRLOG^SDESJSON(.ERRORS,168) Q  ;ISSUE INVALID ERROR MESSAGE IF NO TIME ENTERED
 S ARY84("SDAPPTENDDTTM")=$$ISOTFM^SDAMUTDT(ARY84("SDAPPTENDDTTM"),ARY84("CLINICIEN"))
 I ARY84("SDAPPTENDDTTM")=-1!($L(ARY84("SDAPPTENDDTTM"),".")=1) D ERRLOG^SDESJSON(.ERRORS,168) Q
 I ARY84("SDAPPTSTARTDTTM")>ARY84("SDAPPTENDDTTM") D ERRLOG^SDESJSON(.ERRORS,13) Q
 ;
 ; patient DFN
 S ARY84("DFN")=$G(ARY84("DFN"),"")
 I ARY84("DFN")="" D ERRLOG^SDESJSON(.ERRORS,1) Q
 I ARY84("DFN")'="",'$D(^DPT(+ARY84("DFN"),0)) D ERRLOG^SDESJSON(.ERRORS,2) Q
 ;
 ; clinic IEN
 S ARY84("CLINICIEN")=$G(ARY84("CLINICIEN"),"")
 I ARY84("CLINICIEN")="" D ERRLOG^SDESJSON(.ERRORS,18) Q
 I '$D(^SC(ARY84("CLINICIEN"),0)) D ERRLOG^SDESJSON(.ERRORS,19) Q
 ;
 ; resource
 N RESOURCE,SDTYP,MATCH
 S ARY84("SDRESOURCE")=$G(ARY84("SDRESOURCE"),"")
 I +ARY84("SDRESOURCE"),'$D(^SDEC(409.831,ARY84("SDRESOURCE"),0)) D ERRLOG^SDESJSON(.ERRORS,70) Q
 I 'ARY84("SDRESOURCE") D
 .S MATCH=0
 .S RESOURCE="" F  S RESOURCE=$O(^SDEC(409.831,"ALOC",ARY84("CLINICIEN"),RESOURCE)) Q:RESOURCE'>0!(MATCH>0)  D
 ..S SDTYP=$$GET1^DIQ(409.831,RESOURCE_",",.012,"I")
 ..Q:$P(SDTYP,";",2)'="SC("
 ..S ARY84("SDRESOURCE")=RESOURCE
 ..S MATCH=1
 ;
 I $$GET1^DIQ(409.831,$G(ARY84("SDRESOURCE")),.04,"I")'=$G(ARY84("CLINICIEN")) D ERRLOG^SDESJSON(.ERRORS,366) Q
 ;
 ; max days in future allowed to schedule in clinic
 I $D(^SC(ARY84("CLINICIEN"),"SDP")) D
 .S MAXDAYS=$$GET1^DIQ(44,ARY84("CLINICIEN"),2002)
 .I MAXDAYS="" S MAXDAYS=390
 I ARY84("SDAPPTSTARTDTTM")>$$FMADD^XLFDT($$NOW^XLFDT(),MAXDAYS) D ERRLOG^SDESJSON(.ERRORS,177) Q
 ;
 ; access Type ID
 N TODAY
 S ARY84("WALKIN")=$G(ARY84("WALKIN"),"")
 I ARY84("WALKIN")'="",ARY84("WALKIN")'="y",ARY84("WALKIN")'="n" D ERRLOG^SDESJSON(.ERRORS,178) Q
 S TODAY=$$NOW^XLFDT(),TODAY=$P(TODAY,"."),ARY84("SDAPPTSTARTDATE")=$P(ARY84("SDAPPTSTARTDTTM"),".")   ;Check only the date
 ; added check for walkin - otherwise can't make appointment that isn't today - BLB - added new error code - DJS
 I ARY84("WALKIN")="y",ARY84("SDAPPTSTARTDATE")<TODAY!(ARY84("SDAPPTSTARTDATE")>TODAY) D ERRLOG^SDESJSON(.ERRORS,166) Q
 ;
 ; desired Date of Appointment
 S ARY84("SDESIREDTTM")=$G(ARY84("SDESIREDTTM"),"")
 I ARY84("SDESIREDTTM")'="" S ARY84("SDESIREDTTM")=$$ISOTFM^SDAMUTDT(ARY84("SDESIREDTTM"),ARY84("CLINICIEN"))
 I ARY84("SDESIREDTTM")=-1 D ERRLOG^SDESJSON(.ERRORS,58) Q
 ;
 ; appt request type
 S ARY84("SDREQTYPE")=$G(ARY84("SDREQTYPE"),"")
 I ARY84("SDREQTYPE")="" D ERRLOG^SDESJSON(.ERRORS,60) Q
 I ";E;R;C;A;"'[(";"_$P(ARY84("SDREQTYPE"),"|",1)_";") D ERRLOG^SDESJSON(.ERRORS,61) Q
 I +$P(ARY84("SDREQTYPE"),"|",2)=0 D ERRLOG^SDESJSON(.ERRORS,61) Q
 I ARY84("SDREQTYPE")'="" D
 .I $P(ARY84("SDREQTYPE"),"|",1)="E" I '$D(^SDWL(409.3,+$P(ARY84("SDREQTYPE"),"|",2),0)) S ARY84("SDREQTYPE")=""
 .I $P(ARY84("SDREQTYPE"),"|",1)="R" I '$D(^SD(403.5,+$P(ARY84("SDREQTYPE"),"|",2),0)) S ARY84("SDREQTYPE")=""
 .I $P(ARY84("SDREQTYPE"),"|",1)="C" I '$D(^GMR(123,+$P(ARY84("SDREQTYPE"),"|",2),0)) S ARY84("SDREQTYPE")=""
 .I $P(ARY84("SDREQTYPE"),"|",1)="A" I '$D(^SDEC(409.85,+$P(ARY84("SDREQTYPE"),"|",2),0)) S ARY84("SDREQTYPE")=""
 I ARY84("SDREQTYPE")="" D ERRLOG^SDESJSON(.ERRORS,61) Q
 ;ANU
 I $P(ARY84("SDREQTYPE"),"|",1)="A",$$GET1^DIQ(409.85,+$P(ARY84("SDREQTYPE"),"|",2)_",",23,"I")="C" D ERRLOG^SDESJSON(.ERRORS,433) Q
 I $P(ARY84("SDREQTYPE"),"|",1)="E",$$GET1^DIQ(409.3,+$P(ARY84("SDREQTYPE"),"|",2)_",",23,"I")="C" D ERRLOG^SDESJSON(.ERRORS,433) Q
 S SDCONERR=0
 I $P(ARY84("SDREQTYPE"),"|",1)="C" D
 .I $$GET1^DIQ(123,+$P(ARY84("SDREQTYPE"),"|",2)_",",8,"E")'="PENDING",$$GET1^DIQ(123,+$P(ARY84("SDREQTYPE"),"|",2)_",",8,"E")'="ACTIVE" S SDCONERR=1
 ;
 S IEN=$P(ARY84("SDREQTYPE"),"|",2)
 I $P(ARY84("SDREQTYPE"),"|")="A" D
 .I ARY84("DFN")'=$$GET1^DIQ(409.85,IEN,.01,"I") D ERRLOG^SDESJSON(.ERRORS,447) Q
 I $P(ARY84("SDREQTYPE"),"|")="R" D
 .I ARY84("DFN")'=$$GET1^DIQ(403.5,IEN,.01,"I") D ERRLOG^SDESJSON(.ERRORS,447) Q
 I $P(ARY84("SDREQTYPE"),"|")="C" D
 .I ARY84("DFN")'=$$GET1^DIQ(123,IEN,.02,"I") D ERRLOG^SDESJSON(.ERRORS,447) Q
 ;
 I SDCONERR D ERRLOG^SDESJSON(.ERRORS,433) Q
 ;
 ; note
 S ARY84("SDNOTE")=$G(ARY84("SDNOTE"),"") S:ARY84("SDNOTE")'="" ARY84("SDNOTE")=$TR($E(ARY84("SDNOTE"),1,150),"^"," ")
 ;
 ; appointment Type
 I '$G(ARY84("SDAPPTYPE")),'$L($G(ARY84("SDAPPTNAME"))) D ERRLOG^SDESJSON(.ERRORS,306) Q
 ;
 I '$G(ARY84("SDAPPTNAME")),$G(ARY84("SDAPPTYPE")) D
 .I '$D(^SD(409.1,ARY84("SDAPPTYPE"),0)) D ERRLOG^SDESJSON(.ERRORS,180) Q
 ;
 I $L($G(ARY84("SDAPPTNAME"))) D
 .I '$D(^SD(409.1,"B",$G(ARY84("SDAPPTNAME")))) D ERRLOG^SDESJSON(.ERRORS,446) Q
 .S TYPEIEN=0
 .S ARY84("SDAPPTYPE")=$O(^SD(409.1,"B",ARY84("SDAPPTNAME"),TYPEIEN))
 ;
 ; patient Status
 S ARY84("SDPATIENTSTATUS")=$G(ARY84("SDPATIENTSTATUS"))
 I ARY84("SDPATIENTSTATUS")="" D
 .I $P(ARY84("SDREQTYPE"),"|",1)="A" S ARY84("SDPATIENTSTATUS")=$$GET1^DIQ(409.3,$P(ARY84("SDREQTYPE"),"|",2)_",",.02,"I")
 S ARY84("SDPATIENTSTATUS")=$S(ARY84("SDPATIENTSTATUS")="N":"N",ARY84("SDPATIENTSTATUS")="NEW":"N",ARY84("SDPATIENTSTATUS")="E":"E",ARY84("SDPATIENTSTATUS")="ESTABLISHED":"E",1:"")
 ;
 ; appt length - if passed in, must be 5-240
 S ARY44("SDAPPTLENGTH")=$G(ARY84("SDAPPTLENGTH"),"")
 I ARY84("SDAPPTLENGTH")="" D ERRLOG^SDESJSON(.ERRORS,115) Q
 I ARY84("SDAPPTLENGTH")'="",((+ARY84("SDAPPTLENGTH")<5)!(+ARY84("SDAPPTLENGTH")>240)) D ERRLOG^SDESJSON(.ERRORS,116) Q
 S TIMEDIFF=$$FMDIFF^XLFDT(ARY84("SDAPPTENDDTTM"),ARY84("SDAPPTSTARTDTTM"),2)/60
 I TIMEDIFF'=ARY84("SDAPPTLENGTH") D ERRLOG^SDESJSON(.ERRORS,116) Q
 ;
 ; validate EAS
 S ARY84("SDEAS")=$G(ARY84("SDEAS"),"")
 I $L(ARY84("SDEAS")) S ARY84("SDEAS")=$$EASVALIDATE^SDESUTIL(ARY84("SDEAS"))
 I $G(ARY84("SDEAS"))=-1 D ERRLOG^SDESJSON(.ERRORS,142) Q
 ;
 ; validate provider
 I $G(ARY84("SDPROVIEN")),'$D(^VA(200,+$G(ARY84("SDPROVIEN")),0)) D ERRLOG^SDESJSON(.ERRORS,54) Q
 I '$G(ARY84("SDPROVIEN")) S ARY84("SDPROVIEN")=$$GETPROVIDER(ARY84("CLINICIEN"),$P(ARY84("SDREQTYPE"),"|",1),$P(ARY84("SDREQTYPE"),"|",2))
 ;
 S ARY84("SDEXTERNALID")=$G(ARY84("SDEXTERNALID"),"")
 ;
 ;validate MTRC flag (optional)
 S ARY84("SDMRTC")=$G(ARY84("SDMRTC"),"")
 S ARY84("SDMRTC")=$$UP^XLFSTR($G(ARY84("SDMRTC")))
 S ARY84("SDMRTC")=$S(ARY84("SDMRTC")="TRUE":1,1:0)
 ;
 ;validate parent
 I ARY84("SDPARENT")'="" D
 .I '$D(^SDEC(409.85,ARY84("SDPARENT"))) D ERRLOG^SDESJSON(.ERRORS,179) Q
 .;ANU
 .I $$GET1^DIQ(409.85,ARY84("SDPARENT")_",",23,"I")="C" D ERRLOG^SDESJSON(.ERRORS,433) Q
 ;
 ;validate service connected
 S ARY84("SDSERVCONNPERC")=$G(ARY84("SDSERVCONNPERC"),"")
 I ARY84("SDSERVCONNPERC")'="" S:(+ARY84("SDSERVCONNPERC")<0)!(+ARY84("SDSERVCONNPERC")>100) ARY84("SDSERVCONNPERC")=""
 S ARY84("SDSERVCONN")=$G(ARY84("SDSERVCONN"),"")
 S ARY84("SDSERVCONN")=$S(ARY84("SDSERVCONN")=0:0,ARY84("SDSERVCONN")="NO":0,ARY84("SDSERVCONN")=1:1,ARY84("SDSERVCONN")="YES":1,1:"")
 ;
 Q
 ;
GETPROVIDER(CLINICIEN,REQUESTTYPE,REQUESTIEN) ;
 N DEFAULTPROVIEN,PROVIDERIEN
 ;
 I REQUESTTYPE="R" Q $$GET1^DIQ(403.54,$$GET1^DIQ(403.5,REQUESTIEN,4,"I"),.01,"I")
 ;
 S PROVIDERIEN=0,DEFAULTPROVIEN=""
 F  S PROVIDERIEN=$O(^SC(CLINICIEN,"PR",PROVIDERIEN)) Q:'PROVIDERIEN!($G(DEFAULTPROVIEN))  D
 .I $$GET1^DIQ(44.1,PROVIDERIEN_","_CLINICIEN_",",.02,"I") S DEFAULTPROVIEN=$$GET1^DIQ(44.1,PROVIDERIEN_","_CLINICIEN_",",.01,"I")
 ;
 Q DEFAULTPROVIEN
 ;
CREATE(ARY84FDA,ARY84) ;
 N SDREQTYPE
 S SDREQTYPE=ARY84("SDREQTYPE")
 S ARY84FDA(409.84,"+1,",.01)=$G(ARY84("SDAPPTSTARTDTTM"))
 S ARY84FDA(409.84,"+1,",.02)=$G(ARY84("SDAPPTENDDTTM"))
 S ARY84FDA(409.84,"+1,",.05)=$G(ARY84("DFN"))
 S ARY84FDA(409.84,"+1,",.06)=$G(ARY84("SDAPPTYPE"))
 S ARY84FDA(409.84,"+1,",.07)=$G(ARY84("SDRESOURCE"))
 S ARY84FDA(409.84,"+1,",.08)=$G(DUZ)
 S ARY84FDA(409.84,"+1,",.09)=$$NOW^XLFDT
 S ARY84FDA(409.84,"+1,",.13)=$G(ARY84("WALKIN"))
 S ARY84FDA(409.84,"+1,",.16)=$G(ARY84("SDPROVIEN"))
 S ARY84FDA(409.84,"+1,",.18)=$G(ARY84("SDAPPTLENGTH"))
 S ARY84FDA(409.84,"+1,",.2)=$G(ARY84("SDESIREDTTM"))
 S ARY84FDA(409.84,"+1,",.21)=$G(ARY84("SDEXTERNALID"))
 S ARY84FDA(409.84,"+1,",.22)=$S(SDREQTYPE'="":$P(SDREQTYPE,"|",2)_";"_$S($P(SDREQTYPE,"|",1)="E":"SDWL(409.3,",$P(SDREQTYPE,"|",1)="C":"GMR(123,",$P(SDREQTYPE,"|",1)="R":"SD(403.5,",$P(SDREQTYPE,"|",1)="A":"SDEC(409.85,",1:""),1:"")
 S ARY84FDA(409.84,"+1,",.23)=$G(ARY84("SDPATIENTSTATUS"))
 S ARY84FDA(409.84,"+1,",100)=$G(ARY84("SDEAS"))
 Q
 ;
CLEANUP40984(ARY84,NEWIEN40984,APPTMSG) ;
 N REQUEST
 ;file word processing field in NOTE (409.84,1)
 K SDECMSG
 I ARY84("SDNOTE")'="" N ARR D WP^SDECUTL(.ARR,ARY84("SDNOTE")) D WP^DIE(409.84,NEWIEN40984_",",1,"","ARR","SDECMSG")
 S REQUESTIEN=$P(ARY84("SDREQTYPE"),"|",2)
 ;
 ;delete recall request if appointment made from recall
 I $P(ARY84("SDREQTYPE"),"|",1)="R" D  ; VSE-863 ;6/9/2021
 .N SDCOMM,SDRET,SDRIEN1,SDRRFTR
 .S SDRIEN1=$P(ARY84("SDREQTYPE"),"|",2)
 .S SDCOMM=$$GET1^DIQ(403.5,SDRIEN1,2.5)
 .S SDRRFTR="APPT SCHEDULED" ; "7"
 .D RECDSET^SDEC52A(.SDRET,SDRIEN1,SDRRFTR,SDCOMM)
 ;
 ; add MRTC data to parent request
 I $P(ARY84("SDREQTYPE"),"|",1)="A" D
 .D BUILDAPPTDATA^SDESEDITAPPTREQ(REQUESTIEN,$G(ARY84("SDAPPTSTARTDTTM")),$G(ARY84("CLINICIEN")),$G(ARY84("SDSERVCONNPERC")),$G(ARY84("SDSERVCONN")),$G(ARY84("SDAPPTYPE")),$G(ARY84("SDEAS")),DUZ,.APPTMSG)
 I $G(ARY84("SDPARENT")),$G(ARY84("SDMRTC")) D
 .S REQUEST("MRTC","PATIENT INDICATED DATE")=$G(ARY84("SDESIREDTTM"))
 .S REQUEST("MRTC","CHILD REQUEST")=REQUESTIEN
 .S REQUEST("MRTC","MRTC APPOINTMENT")=$G(NEWIEN40984)
 .D BUILDMRTCLINKS^SDESEDITAPPTREQ(.REQUEST,$G(ARY84("SDPARENT")))
 .D BUILDMRTCPID^SDESEDITAPPTREQ(.REQUEST,$G(ARY84("SDPARENT")))
 ;
 I $P(ARY84("SDREQTYPE"),"|",1)="C" D
 .D REQSET^SDEC07A($P($G(ARY84("SDREQTYPE")),"|",2),$G(ARY84("SDPROVIEN")),"",1,"",$G(ARY84("SDNOTE")),$G(ARY84("SDAPPTSTARTDTTM")),$G(ARY84("SDRESOURCE")),$G(ARY84("DFN")))
 .D UPDATECONSULTPID^SDES2APPTUTIL($P($G(ARY84("SDREQTYPE")),"|",2),$G(ARY84("SDESIREDTTM")),$G(ARY84("DFN")))
 ;add entry to OUTPATIENT ENCOUNTER file (#409.68)  ;alb/sat 672
 I $$NOW^XLFDT>ARY84("SDAPPTSTARTDTTM"),$$NEW^SDPCE(ARY84("SDAPPTSTARTDTTM")) D
 .S ENCOUNTER=$$GETAPT^SDVSIT2(ARY84("DFN"),ARY84("SDAPPTSTARTDTTM"),ARY84("CLINICIEN"))
 ;
 Q
 ;
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HSDESCREATEAPPT   11542     printed  Sep 23, 2025@20:33:11                                                                                                                                                                                             Page 2
SDESCREATEAPPT ;ALB/BLB,MGD,DJS,ANU,BLB,TJB,BLB/TJB,LAB,TJB - CREATE APPOINTMENT RPC; JUN 17, 2024
 +1       ;;5.3;Scheduling;**814,823,826,827,828,842,843,846,847,851,853,869,877,881**;Aug 13, 1993;Build 10
 +2       ;;Per VHA Directive 6402, this routine should not be modified
 +3       ;
 +4       ;----------------- ----------------- ----------
 +5       ;
 +6        QUIT 
 +7       ;
 +8       ; create appt in file 409.84. Called from wrapper level SDESCRTAPPTWRAP. See SDESCRTAPPTWRAP for required inputs.
 +9       ;
VALIDATE(ERRORS,ARY84,ARY44) ; Validate input
 +1        NEW MAXDAYS,SDECRNOD,RESOURCED,ENCOUNTER,REQUESTIEN,SDCONERR,SDAPPTSTARTDATE,IEN,TYPEIEN,TIMEDIFF
 +2       ;
 +3       ; appointment Start Date and Time
 +4        SET ARY84("SDAPPTSTARTDTTM")=$GET(ARY84("SDAPPTSTARTDTTM"),"")
 +5        IF ARY84("SDAPPTSTARTDTTM")=""
               DO ERRLOG^SDESJSON(.ERRORS,165)
               QUIT 
 +6       ;ISSUE INVALID ERROR MESSAGE IF NO TIME ENTERED
           IF $PIECE($GET(ARY84("SDAPPTSTARTDTTM")),"T",2)=""
               DO ERRLOG^SDESJSON(.ERRORS,166)
               QUIT 
 +7        SET ARY84("SDAPPTSTARTDTTM")=$$ISOTFM^SDAMUTDT(ARY84("SDAPPTSTARTDTTM"),ARY84("CLINICIEN"))
 +8        IF ARY84("SDAPPTSTARTDTTM")=-1
               DO ERRLOG^SDESJSON(.ERRORS,166)
               QUIT 
 +9       ;
 +10      ; appointment End Date and Time
 +11       SET ARY84("SDAPPTENDDTTM")=$GET(ARY84("SDAPPTENDDTTM"),"")
 +12       IF ARY84("SDAPPTENDDTTM")=""
               DO ERRLOG^SDESJSON(.ERRORS,167)
               QUIT 
 +13      ;ISSUE INVALID ERROR MESSAGE IF NO TIME ENTERED
           IF $PIECE($GET(ARY84("SDAPPTENDDTTM")),"T",2)=""
               DO ERRLOG^SDESJSON(.ERRORS,168)
               QUIT 
 +14       SET ARY84("SDAPPTENDDTTM")=$$ISOTFM^SDAMUTDT(ARY84("SDAPPTENDDTTM"),ARY84("CLINICIEN"))
 +15       IF ARY84("SDAPPTENDDTTM")=-1!($LENGTH(ARY84("SDAPPTENDDTTM"),".")=1)
               DO ERRLOG^SDESJSON(.ERRORS,168)
               QUIT 
 +16       IF ARY84("SDAPPTSTARTDTTM")>ARY84("SDAPPTENDDTTM")
               DO ERRLOG^SDESJSON(.ERRORS,13)
               QUIT 
 +17      ;
 +18      ; patient DFN
 +19       SET ARY84("DFN")=$GET(ARY84("DFN"),"")
 +20       IF ARY84("DFN")=""
               DO ERRLOG^SDESJSON(.ERRORS,1)
               QUIT 
 +21       IF ARY84("DFN")'=""
               IF '$DATA(^DPT(+ARY84("DFN"),0))
                   DO ERRLOG^SDESJSON(.ERRORS,2)
                   QUIT 
 +22      ;
 +23      ; clinic IEN
 +24       SET ARY84("CLINICIEN")=$GET(ARY84("CLINICIEN"),"")
 +25       IF ARY84("CLINICIEN")=""
               DO ERRLOG^SDESJSON(.ERRORS,18)
               QUIT 
 +26       IF '$DATA(^SC(ARY84("CLINICIEN"),0))
               DO ERRLOG^SDESJSON(.ERRORS,19)
               QUIT 
 +27      ;
 +28      ; resource
 +29       NEW RESOURCE,SDTYP,MATCH
 +30       SET ARY84("SDRESOURCE")=$GET(ARY84("SDRESOURCE"),"")
 +31       IF +ARY84("SDRESOURCE")
               IF '$DATA(^SDEC(409.831,ARY84("SDRESOURCE"),0))
                   DO ERRLOG^SDESJSON(.ERRORS,70)
                   QUIT 
 +32       IF 'ARY84("SDRESOURCE")
               Begin DoDot:1
 +33               SET MATCH=0
 +34               SET RESOURCE=""
                   FOR 
                       SET RESOURCE=$ORDER(^SDEC(409.831,"ALOC",ARY84("CLINICIEN"),RESOURCE))
                       if RESOURCE'>0!(MATCH>0)
                           QUIT 
                       Begin DoDot:2
 +35                       SET SDTYP=$$GET1^DIQ(409.831,RESOURCE_",",.012,"I")
 +36                       if $PIECE(SDTYP,";",2)'="SC("
                               QUIT 
 +37                       SET ARY84("SDRESOURCE")=RESOURCE
 +38                       SET MATCH=1
                       End DoDot:2
               End DoDot:1
 +39      ;
 +40       IF $$GET1^DIQ(409.831,$GET(ARY84("SDRESOURCE")),.04,"I")'=$GET(ARY84("CLINICIEN"))
               DO ERRLOG^SDESJSON(.ERRORS,366)
               QUIT 
 +41      ;
 +42      ; max days in future allowed to schedule in clinic
 +43       IF $DATA(^SC(ARY84("CLINICIEN"),"SDP"))
               Begin DoDot:1
 +44               SET MAXDAYS=$$GET1^DIQ(44,ARY84("CLINICIEN"),2002)
 +45               IF MAXDAYS=""
                       SET MAXDAYS=390
               End DoDot:1
 +46       IF ARY84("SDAPPTSTARTDTTM")>$$FMADD^XLFDT($$NOW^XLFDT(),MAXDAYS)
               DO ERRLOG^SDESJSON(.ERRORS,177)
               QUIT 
 +47      ;
 +48      ; access Type ID
 +49       NEW TODAY
 +50       SET ARY84("WALKIN")=$GET(ARY84("WALKIN"),"")
 +51       IF ARY84("WALKIN")'=""
               IF ARY84("WALKIN")'="y"
                   IF ARY84("WALKIN")'="n"
                       DO ERRLOG^SDESJSON(.ERRORS,178)
                       QUIT 
 +52      ;Check only the date
           SET TODAY=$$NOW^XLFDT()
           SET TODAY=$PIECE(TODAY,".")
           SET ARY84("SDAPPTSTARTDATE")=$PIECE(ARY84("SDAPPTSTARTDTTM"),".")
 +53      ; added check for walkin - otherwise can't make appointment that isn't today - BLB - added new error code - DJS
 +54       IF ARY84("WALKIN")="y"
               IF ARY84("SDAPPTSTARTDATE")<TODAY!(ARY84("SDAPPTSTARTDATE")>TODAY)
                   DO ERRLOG^SDESJSON(.ERRORS,166)
                   QUIT 
 +55      ;
 +56      ; desired Date of Appointment
 +57       SET ARY84("SDESIREDTTM")=$GET(ARY84("SDESIREDTTM"),"")
 +58       IF ARY84("SDESIREDTTM")'=""
               SET ARY84("SDESIREDTTM")=$$ISOTFM^SDAMUTDT(ARY84("SDESIREDTTM"),ARY84("CLINICIEN"))
 +59       IF ARY84("SDESIREDTTM")=-1
               DO ERRLOG^SDESJSON(.ERRORS,58)
               QUIT 
 +60      ;
 +61      ; appt request type
 +62       SET ARY84("SDREQTYPE")=$GET(ARY84("SDREQTYPE"),"")
 +63       IF ARY84("SDREQTYPE")=""
               DO ERRLOG^SDESJSON(.ERRORS,60)
               QUIT 
 +64       IF ";E;R;C;A;"'[(";"_$PIECE(ARY84("SDREQTYPE"),"|",1)_";")
               DO ERRLOG^SDESJSON(.ERRORS,61)
               QUIT 
 +65       IF +$PIECE(ARY84("SDREQTYPE"),"|",2)=0
               DO ERRLOG^SDESJSON(.ERRORS,61)
               QUIT 
 +66       IF ARY84("SDREQTYPE")'=""
               Begin DoDot:1
 +67               IF $PIECE(ARY84("SDREQTYPE"),"|",1)="E"
                       IF '$DATA(^SDWL(409.3,+$PIECE(ARY84("SDREQTYPE"),"|",2),0))
                           SET ARY84("SDREQTYPE")=""
 +68               IF $PIECE(ARY84("SDREQTYPE"),"|",1)="R"
                       IF '$DATA(^SD(403.5,+$PIECE(ARY84("SDREQTYPE"),"|",2),0))
                           SET ARY84("SDREQTYPE")=""
 +69               IF $PIECE(ARY84("SDREQTYPE"),"|",1)="C"
                       IF '$DATA(^GMR(123,+$PIECE(ARY84("SDREQTYPE"),"|",2),0))
                           SET ARY84("SDREQTYPE")=""
 +70               IF $PIECE(ARY84("SDREQTYPE"),"|",1)="A"
                       IF '$DATA(^SDEC(409.85,+$PIECE(ARY84("SDREQTYPE"),"|",2),0))
                           SET ARY84("SDREQTYPE")=""
               End DoDot:1
 +71       IF ARY84("SDREQTYPE")=""
               DO ERRLOG^SDESJSON(.ERRORS,61)
               QUIT 
 +72      ;ANU
 +73       IF $PIECE(ARY84("SDREQTYPE"),"|",1)="A"
               IF $$GET1^DIQ(409.85,+$PIECE(ARY84("SDREQTYPE"),"|",2)_",",23,"I")="C"
                   DO ERRLOG^SDESJSON(.ERRORS,433)
                   QUIT 
 +74       IF $PIECE(ARY84("SDREQTYPE"),"|",1)="E"
               IF $$GET1^DIQ(409.3,+$PIECE(ARY84("SDREQTYPE"),"|",2)_",",23,"I")="C"
                   DO ERRLOG^SDESJSON(.ERRORS,433)
                   QUIT 
 +75       SET SDCONERR=0
 +76       IF $PIECE(ARY84("SDREQTYPE"),"|",1)="C"
               Begin DoDot:1
 +77               IF $$GET1^DIQ(123,+$PIECE(ARY84("SDREQTYPE"),"|",2)_",",8,"E")'="PENDING"
                       IF $$GET1^DIQ(123,+$PIECE(ARY84("SDREQTYPE"),"|",2)_",",8,"E")'="ACTIVE"
                           SET SDCONERR=1
               End DoDot:1
 +78      ;
 +79       SET IEN=$PIECE(ARY84("SDREQTYPE"),"|",2)
 +80       IF $PIECE(ARY84("SDREQTYPE"),"|")="A"
               Begin DoDot:1
 +81               IF ARY84("DFN")'=$$GET1^DIQ(409.85,IEN,.01,"I")
                       DO ERRLOG^SDESJSON(.ERRORS,447)
                       QUIT 
               End DoDot:1
 +82       IF $PIECE(ARY84("SDREQTYPE"),"|")="R"
               Begin DoDot:1
 +83               IF ARY84("DFN")'=$$GET1^DIQ(403.5,IEN,.01,"I")
                       DO ERRLOG^SDESJSON(.ERRORS,447)
                       QUIT 
               End DoDot:1
 +84       IF $PIECE(ARY84("SDREQTYPE"),"|")="C"
               Begin DoDot:1
 +85               IF ARY84("DFN")'=$$GET1^DIQ(123,IEN,.02,"I")
                       DO ERRLOG^SDESJSON(.ERRORS,447)
                       QUIT 
               End DoDot:1
 +86      ;
 +87       IF SDCONERR
               DO ERRLOG^SDESJSON(.ERRORS,433)
               QUIT 
 +88      ;
 +89      ; note
 +90       SET ARY84("SDNOTE")=$GET(ARY84("SDNOTE"),"")
           if ARY84("SDNOTE")'=""
               SET ARY84("SDNOTE")=$TRANSLATE($EXTRACT(ARY84("SDNOTE"),1,150),"^"," ")
 +91      ;
 +92      ; appointment Type
 +93       IF '$GET(ARY84("SDAPPTYPE"))
               IF '$LENGTH($GET(ARY84("SDAPPTNAME")))
                   DO ERRLOG^SDESJSON(.ERRORS,306)
                   QUIT 
 +94      ;
 +95       IF '$GET(ARY84("SDAPPTNAME"))
               IF $GET(ARY84("SDAPPTYPE"))
                   Begin DoDot:1
 +96                   IF '$DATA(^SD(409.1,ARY84("SDAPPTYPE"),0))
                           DO ERRLOG^SDESJSON(.ERRORS,180)
                           QUIT 
                   End DoDot:1
 +97      ;
 +98       IF $LENGTH($GET(ARY84("SDAPPTNAME")))
               Begin DoDot:1
 +99               IF '$DATA(^SD(409.1,"B",$GET(ARY84("SDAPPTNAME"))))
                       DO ERRLOG^SDESJSON(.ERRORS,446)
                       QUIT 
 +100              SET TYPEIEN=0
 +101              SET ARY84("SDAPPTYPE")=$ORDER(^SD(409.1,"B",ARY84("SDAPPTNAME"),TYPEIEN))
               End DoDot:1
 +102     ;
 +103     ; patient Status
 +104      SET ARY84("SDPATIENTSTATUS")=$GET(ARY84("SDPATIENTSTATUS"))
 +105      IF ARY84("SDPATIENTSTATUS")=""
               Begin DoDot:1
 +106              IF $PIECE(ARY84("SDREQTYPE"),"|",1)="A"
                       SET ARY84("SDPATIENTSTATUS")=$$GET1^DIQ(409.3,$PIECE(ARY84("SDREQTYPE"),"|",2)_",",.02,"I")
               End DoDot:1
 +107      SET ARY84("SDPATIENTSTATUS")=$SELECT(ARY84("SDPATIENTSTATUS")="N":"N",ARY84("SDPATIENTSTATUS")="NEW":"N",ARY84("SDPATIENTSTATUS")="E":"E",ARY84("SDPATIENTSTATUS")="ESTABLISHED":"E",1:"")
 +108     ;
 +109     ; appt length - if passed in, must be 5-240
 +110      SET ARY44("SDAPPTLENGTH")=$GET(ARY84("SDAPPTLENGTH"),"")
 +111      IF ARY84("SDAPPTLENGTH")=""
               DO ERRLOG^SDESJSON(.ERRORS,115)
               QUIT 
 +112      IF ARY84("SDAPPTLENGTH")'=""
               IF ((+ARY84("SDAPPTLENGTH")<5)!(+ARY84("SDAPPTLENGTH")>240))
                   DO ERRLOG^SDESJSON(.ERRORS,116)
                   QUIT 
 +113      SET TIMEDIFF=$$FMDIFF^XLFDT(ARY84("SDAPPTENDDTTM"),ARY84("SDAPPTSTARTDTTM"),2)/60
 +114      IF TIMEDIFF'=ARY84("SDAPPTLENGTH")
               DO ERRLOG^SDESJSON(.ERRORS,116)
               QUIT 
 +115     ;
 +116     ; validate EAS
 +117      SET ARY84("SDEAS")=$GET(ARY84("SDEAS"),"")
 +118      IF $LENGTH(ARY84("SDEAS"))
               SET ARY84("SDEAS")=$$EASVALIDATE^SDESUTIL(ARY84("SDEAS"))
 +119      IF $GET(ARY84("SDEAS"))=-1
               DO ERRLOG^SDESJSON(.ERRORS,142)
               QUIT 
 +120     ;
 +121     ; validate provider
 +122      IF $GET(ARY84("SDPROVIEN"))
               IF '$DATA(^VA(200,+$GET(ARY84("SDPROVIEN")),0))
                   DO ERRLOG^SDESJSON(.ERRORS,54)
                   QUIT 
 +123      IF '$GET(ARY84("SDPROVIEN"))
               SET ARY84("SDPROVIEN")=$$GETPROVIDER(ARY84("CLINICIEN"),$PIECE(ARY84("SDREQTYPE"),"|",1),$PIECE(ARY84("SDREQTYPE"),"|",2))
 +124     ;
 +125      SET ARY84("SDEXTERNALID")=$GET(ARY84("SDEXTERNALID"),"")
 +126     ;
 +127     ;validate MTRC flag (optional)
 +128      SET ARY84("SDMRTC")=$GET(ARY84("SDMRTC"),"")
 +129      SET ARY84("SDMRTC")=$$UP^XLFSTR($GET(ARY84("SDMRTC")))
 +130      SET ARY84("SDMRTC")=$SELECT(ARY84("SDMRTC")="TRUE":1,1:0)
 +131     ;
 +132     ;validate parent
 +133      IF ARY84("SDPARENT")'=""
               Begin DoDot:1
 +134              IF '$DATA(^SDEC(409.85,ARY84("SDPARENT")))
                       DO ERRLOG^SDESJSON(.ERRORS,179)
                       QUIT 
 +135     ;ANU
 +136              IF $$GET1^DIQ(409.85,ARY84("SDPARENT")_",",23,"I")="C"
                       DO ERRLOG^SDESJSON(.ERRORS,433)
                       QUIT 
               End DoDot:1
 +137     ;
 +138     ;validate service connected
 +139      SET ARY84("SDSERVCONNPERC")=$GET(ARY84("SDSERVCONNPERC"),"")
 +140      IF ARY84("SDSERVCONNPERC")'=""
               if (+ARY84("SDSERVCONNPERC")<0)!(+ARY84("SDSERVCONNPERC")>100)
                   SET ARY84("SDSERVCONNPERC")=""
 +141      SET ARY84("SDSERVCONN")=$GET(ARY84("SDSERVCONN"),"")
 +142      SET ARY84("SDSERVCONN")=$SELECT(ARY84("SDSERVCONN")=0:0,ARY84("SDSERVCONN")="NO":0,ARY84("SDSERVCONN")=1:1,ARY84("SDSERVCONN")="YES":1,1:"")
 +143     ;
 +144      QUIT 
 +145     ;
GETPROVIDER(CLINICIEN,REQUESTTYPE,REQUESTIEN) ;
 +1        NEW DEFAULTPROVIEN,PROVIDERIEN
 +2       ;
 +3        IF REQUESTTYPE="R"
               QUIT $$GET1^DIQ(403.54,$$GET1^DIQ(403.5,REQUESTIEN,4,"I"),.01,"I")
 +4       ;
 +5        SET PROVIDERIEN=0
           SET DEFAULTPROVIEN=""
 +6        FOR 
               SET PROVIDERIEN=$ORDER(^SC(CLINICIEN,"PR",PROVIDERIEN))
               if 'PROVIDERIEN!($GET(DEFAULTPROVIEN))
                   QUIT 
               Begin DoDot:1
 +7                IF $$GET1^DIQ(44.1,PROVIDERIEN_","_CLINICIEN_",",.02,"I")
                       SET DEFAULTPROVIEN=$$GET1^DIQ(44.1,PROVIDERIEN_","_CLINICIEN_",",.01,"I")
               End DoDot:1
 +8       ;
 +9        QUIT DEFAULTPROVIEN
 +10      ;
CREATE(ARY84FDA,ARY84) ;
 +1        NEW SDREQTYPE
 +2        SET SDREQTYPE=ARY84("SDREQTYPE")
 +3        SET ARY84FDA(409.84,"+1,",.01)=$GET(ARY84("SDAPPTSTARTDTTM"))
 +4        SET ARY84FDA(409.84,"+1,",.02)=$GET(ARY84("SDAPPTENDDTTM"))
 +5        SET ARY84FDA(409.84,"+1,",.05)=$GET(ARY84("DFN"))
 +6        SET ARY84FDA(409.84,"+1,",.06)=$GET(ARY84("SDAPPTYPE"))
 +7        SET ARY84FDA(409.84,"+1,",.07)=$GET(ARY84("SDRESOURCE"))
 +8        SET ARY84FDA(409.84,"+1,",.08)=$GET(DUZ)
 +9        SET ARY84FDA(409.84,"+1,",.09)=$$NOW^XLFDT
 +10       SET ARY84FDA(409.84,"+1,",.13)=$GET(ARY84("WALKIN"))
 +11       SET ARY84FDA(409.84,"+1,",.16)=$GET(ARY84("SDPROVIEN"))
 +12       SET ARY84FDA(409.84,"+1,",.18)=$GET(ARY84("SDAPPTLENGTH"))
 +13       SET ARY84FDA(409.84,"+1,",.2)=$GET(ARY84("SDESIREDTTM"))
 +14       SET ARY84FDA(409.84,"+1,",.21)=$GET(ARY84("SDEXTERNALID"))
 +15      SET ARY84FDA(409.84,"+1,",.22)=$SELECT(SDREQTYPE'="":$PIECE(SDREQTYPE,"|",2)_";"_$SELECT($PIECE(SDREQTYPE,"|",1)="E":"SDWL(409.3,",...
           ... $PIECE(SDREQTYPE,"|",1)="C":"GMR(123,",$PIECE(SDREQTYPE,"|",1)="R":"SD(403.5,",$PIECE(SDREQTYPE,"|",1)="A":"SDEC(409.85,",1:""),1:"")
 +16       SET ARY84FDA(409.84,"+1,",.23)=$GET(ARY84("SDPATIENTSTATUS"))
 +17       SET ARY84FDA(409.84,"+1,",100)=$GET(ARY84("SDEAS"))
 +18       QUIT 
 +19      ;
CLEANUP40984(ARY84,NEWIEN40984,APPTMSG) ;
 +1        NEW REQUEST
 +2       ;file word processing field in NOTE (409.84,1)
 +3        KILL SDECMSG
 +4        IF ARY84("SDNOTE")'=""
               NEW ARR
               DO WP^SDECUTL(.ARR,ARY84("SDNOTE"))
               DO WP^DIE(409.84,NEWIEN40984_",",1,"","ARR","SDECMSG")
 +5        SET REQUESTIEN=$PIECE(ARY84("SDREQTYPE"),"|",2)
 +6       ;
 +7       ;delete recall request if appointment made from recall
 +8       ; VSE-863 ;6/9/2021
           IF $PIECE(ARY84("SDREQTYPE"),"|",1)="R"
               Begin DoDot:1
 +9                NEW SDCOMM,SDRET,SDRIEN1,SDRRFTR
 +10               SET SDRIEN1=$PIECE(ARY84("SDREQTYPE"),"|",2)
 +11               SET SDCOMM=$$GET1^DIQ(403.5,SDRIEN1,2.5)
 +12      ; "7"
                   SET SDRRFTR="APPT SCHEDULED"
 +13               DO RECDSET^SDEC52A(.SDRET,SDRIEN1,SDRRFTR,SDCOMM)
               End DoDot:1
 +14      ;
 +15      ; add MRTC data to parent request
 +16       IF $PIECE(ARY84("SDREQTYPE"),"|",1)="A"
               Begin DoDot:1
 +17               DO BUILDAPPTDATA^SDESEDITAPPTREQ(REQUESTIEN,$GET(ARY84("SDAPPTSTARTDTTM")),$GET(ARY84("CLINICIEN")),$GET(ARY84("SDSERVCONNPERC")),$GET(ARY84("SDSERVCONN")),$GET(ARY84("SDAPPTYPE")),$GET(ARY84("SDEAS")),DUZ,.APPTMSG)
               End DoDot:1
 +18       IF $GET(ARY84("SDPARENT"))
               IF $GET(ARY84("SDMRTC"))
                   Begin DoDot:1
 +19                   SET REQUEST("MRTC","PATIENT INDICATED DATE")=$GET(ARY84("SDESIREDTTM"))
 +20                   SET REQUEST("MRTC","CHILD REQUEST")=REQUESTIEN
 +21                   SET REQUEST("MRTC","MRTC APPOINTMENT")=$GET(NEWIEN40984)
 +22                   DO BUILDMRTCLINKS^SDESEDITAPPTREQ(.REQUEST,$GET(ARY84("SDPARENT")))
 +23                   DO BUILDMRTCPID^SDESEDITAPPTREQ(.REQUEST,$GET(ARY84("SDPARENT")))
                   End DoDot:1
 +24      ;
 +25       IF $PIECE(ARY84("SDREQTYPE"),"|",1)="C"
               Begin DoDot:1
 +26               DO REQSET^SDEC07A($PIECE($GET(ARY84("SDREQTYPE")),"|",2),$GET(ARY84("SDPROVIEN")),"",1,"",$GET(ARY84("SDNOTE")),$GET(ARY84("SDAPPTSTARTDTTM")),$GET(ARY84("SDRESOURCE")),$GET(ARY84("DFN")))
 +27               DO UPDATECONSULTPID^SDES2APPTUTIL($PIECE($GET(ARY84("SDREQTYPE")),"|",2),$GET(ARY84("SDESIREDTTM")),$GET(ARY84("DFN")))
               End DoDot:1
 +28      ;add entry to OUTPATIENT ENCOUNTER file (#409.68)  ;alb/sat 672
 +29       IF $$NOW^XLFDT>ARY84("SDAPPTSTARTDTTM")
               IF $$NEW^SDPCE(ARY84("SDAPPTSTARTDTTM"))
                   Begin DoDot:1
 +30                   SET ENCOUNTER=$$GETAPT^SDVSIT2(ARY84("DFN"),ARY84("SDAPPTSTARTDTTM"),ARY84("CLINICIEN"))
                   End DoDot:1
 +31      ;
 +32       QUIT 
 +33      ;