- 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 Apr 23, 2025@19:10:59 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 ;