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

SDESCANAPPT2.m

Go to the documentation of this file.
SDESCANAPPT2 ;ALB/DJS,LAB,MGD,BWF,BLB,ANU,MCB,JAS - SCHEDULING CANCEL APPOINTMENTS RPC ;FEB 16, 2024
 ;;5.3;Scheduling;**838,842,844,845,847,851,864,871,873**;Aug 13, 1993;Build 10
 ;;Per VHA Directive 6402, this routine should not be modified
 ;
 ; Clone of SDESCANCELAPPTS - BLB
 ;
 ;APPTIEN - (required) pointer to SDEC APPOINTMENT file #409.84
 ;CLINICIEN -(required) pointer to hospital location file #44
 ;DFN -(required) pointer to patient file #2
 ;CANBYCLINORPAT   - (required) appointment Status valid values: C=CANCELLED BY CLINIC ; PC=CANCELLED BY PATIENT
 ;CANCELREASON    - (required) Cancellation Reason NAME in CANCELLATION REASON File (409.2)
 ;NOTE   - (optional)
 ;CANCELHASH   - (optional) List of cancellation comment hash tags
 ;EAS - (optional)
 ;NEWPID - (optional) New/edited PID passed in when cancelling an appointment by patient
 ;
 Q
 ;
CANAPPT2(JSONRETURN,APPTIEN,CLINICIEN,DFN,CANBYCLINORPAT,CANCELREASON,NOTE,CANCELHASH,EAS,NEWPID) ;
 N ERRORS,ISAPPTIENVALID,ORDERLOCK,ISCANBYVALID,ISCANREASONVALID,ISDFNVALID,SDATA,ISCLINICVALID,APPTENDTIME,APPTSTARTTIME,PROVIEN,ISEASVALID,ISCANBYVALID,ISNOTEVALID,ISCANDTTMVALID,EDITED,CLINICSUBIEN,IS2CANCELLED
 N RECALLREQIEN,RECALLREQLINK,RESOURCE,OLDRECALLPTR,RETURN,RECALLRET,CANCELREASONIEN,APPTLENGTH,MRTC,PARENTREQUEST,PARENTSTATUS,IS40984CANCELLED,IS44CANCELLED,REQUESTTYPE,REQUESTIEN,APPTTYPE
 ;
 ; input validation
 D VALIDATE($G(APPTIEN),$G(CLINICIEN),$G(DFN),$G(CANBYCLINORPAT),$G(CANCELREASON),$G(NOTE),$G(CANCELHASH),$G(EAS),.NEWPID)
 I $D(ERRORS) S ERRORS("Appointment",1)="" M RETURN=ERRORS D BUILDJSON(.JSONRETURN,.RETURN) Q
 ;
 ; populate variables
 D POPULATE(APPTIEN,.APPTSTARTTIME,.REQUESTTYPE,.REQUESTIEN,.APPTENDTIME,.APPTLENGTH,.APPTTYPE,.RESOURCE,.WALKIN,.MRTC,.PARENTREQUEST,.PARENTSTATUS,.SLOTSTATUSSTRING)
 S IENS44=$$GET44RECORDIENS(CLINICIEN,APPTSTARTTIME,DFN)
 ; first event handler
 S CLINICSUBIEN=$$BEFOREEVENT(DFN,APPTSTARTTIME,CLINICIEN,.SDATA)
 ;
 ; cancel appointments
 D CANCEL40984(.ERRORS,APPTIEN,CANCELREASON,CANBYCLINORPAT,WALKIN,$G(EAS))
 D CANCEL44(.ERRORS,CLINICIEN,APPTSTARTTIME,DFN,APPTIEN,WALKIN,IENS44)
 D CANCEL2(.ERRORS,DFN,APPTSTARTTIME,CANBYCLINORPAT,CANCELREASON,$G(NOTE),APPTIEN,CLINICIEN,IENS44)
 I $D(ERRORS) S ERRORS("Appointment",1)="" M RETURN=ERRORS D BUILDJSON(.JSONRETURN,.RETURN) Q
 ;
 ; update linked appointment request records
 D UPDATEREQUEST(REQUESTIEN,APPTIEN,CLINICIEN,DFN,CANBYCLINORPAT,$G(NOTE),APPTSTARTTIME,RESOURCE,MRTC,PARENTREQUEST,PARENTSTATUS,$G(NEWPID))
 ;
 ; update compensation and pension records
 I APPTTYPE="COMPENSATION & PENSION" D AMIECAN^SDESCOMPPEN(.RETURN,DFN,APPTSTARTTIME)
 ;
 ; remove outpatient encounter
 D REMOVEENCOUNTER(APPTIEN,$$GET1^DIQ(2.98,APPTSTARTTIME_","_DFN_",",21,"I"),APPTSTARTTIME,DFN,IENS44)
 ;
 ; update clinic availability
 D INCREMENTAVAIL1^SDESUTIL(CLINICIEN,APPTSTARTTIME,APPTLENGTH) ;
 ;
 ; second event handler
 D AFTEREVENT($G(DFN),$G(APPTSTARTTIME),$G(CLINICIEN),$G(CLINICSUBIEN),.SDATA)
 ;
 S RETURN("Appointment","Cancelled")=$G(APPTIEN)
 D BUILDJSON(.JSONRETURN,.RETURN) Q
 Q
 ;
CANCEL40984(ERRORS,APPTIEN,CANCELREASON,CANBYCLINORPAT,WALKIN,EAS) ;
 N IENS,FDA40984,ERR84
 ;
 S IENS=APPTIEN_","
 ;
 I WALKIN="YES" D
 .S FDA40984(409.84,IENS,.03)=""
 .S FDA40984(409.84,IENS,.04)=""
 S FDA40984(409.84,IENS,.12)=$$NOW^XLFDT
 S FDA40984(409.84,IENS,.121)=DUZ
 S FDA40984(409.84,IENS,.122)=CANCELREASONIEN
 S FDA40984(409.84,IENS,.17)=CANBYCLINORPAT
 S FDA40984(409.84,IENS,100)=EAS
 ;
 L +^SDEC(APPTIEN):3 I '$T D ERRLOG^SDESJSON(.ERRORS,192) Q
 D FILE^DIE("","FDA40984","ERR84") K FDA40984
 L -^SDEC(APPTIEN)
 I $D(ERR84) D ERRLOG^SDESJSON(.ERRORS,191) Q
 Q
 ;
CANCEL44(ERRORS,CLINICIEN,APPTSTARTTIME,DFN,APPTIEN,WALKIN,IENS44) ;
 N IENS,FDA44003,ERR44003
 ;
 I WALKIN="YES" D
 .S FDA44003(44.003,IENS44,309)=""
 S FDA44003(44.003,IENS44,310)="C"
 ;
 L +^SC(CLINICIEN):3 I '$T D ERRLOG^SDESJSON(.ERRORS,186),CLEAN40984(APPTIEN) Q
 D FILE^DIE("","FDA44003","ERR44003") K FDA44003
 L -^SC(CLINICIEN)
 I $D(ERR44003) D ERRLOG^SDESJSON(.ERRORS,191) D CLEAN40984(APPTIEN) Q
 Q
 ;
CANCEL2(ERRORS,DFN,APPTSTARTTIME,CANBYCLINORPAT,CANCELREASON,NOTE,APPTIEN,CLINICIEN,IENS44) ;
 N IENS,FDA298,ERR298
 S IENS=APPTSTARTTIME_","_DFN_","
 S FDA298(2.98,IENS,3)=CANBYCLINORPAT
 S FDA298(2.98,IENS,14)=DUZ
 S FDA298(2.98,IENS,15)=$$NOW^XLFDT
 S FDA298(2.98,IENS,16)=CANCELREASONIEN
 S FDA298(2.98,IENS,17)=NOTE
 L +^DPT(DFN):3 I '$T D ERRLOG^SDESJSON(.ERRORS,187),CLEAN40984(APPTIEN),CLEAN44003(DFN,CLINICIEN,APPTSTARTTIME,IENS44) Q
 D FILE^DIE("","FDA298","ERR298") K FDA298
 L -^DPT(DFN)
 I $D(ERR298) D ERRLOG^SDESJSON(.ERRORS,191),CLEAN40984(APPTIEN),CLEAN44003(DFN,CLINICIEN,APPTSTARTTIME,IENS44) Q
 Q
 ;
UPDATEREQUEST(REQUESTIEN,APPTIEN,CLINICIEN,DFN,CANBYCLINORPAT,NOTE,APPTSTARTTIME,RESOURCE,MRTC,PARENTREQUEST,PARENTSTATUS,NEWPID) ;
 N RECALLREQIEN,RECALLREQLINK,OLDRECALLPTR,PROVIDERIEN
 ;
 I REQUESTTYPE="APPTREQ"!(REQUESTTYPE="RTC")!(REQUESTTYPE="VETERAN")!(REQUESTTYPE="MOBILE") D
 .D OPENAPPTREQUEST(REQUESTIEN,APPTIEN,MRTC,PARENTREQUEST,PARENTSTATUS,DFN,CANBYCLINORPAT)
 .D DELETEAPPTDATA(REQUESTIEN)
 .D UPDCONTSEQ^SDESCONTACTS(DFN,REQUESTIEN)
 .I $G(NEWPID),CANBYCLINORPAT="PC" D
 ..D ADDPIDHISTORY^SDESCREATEAPPREQ(REQUESTIEN,NEWPID)
 ;
 I REQUESTTYPE="RECALL" D
 .D REOPEN^SDESRECALLREQ(.RECALLRET,APPTIEN,,NEWPID,CANBYCLINORPAT)
 .I '$D(RECALLRET) Q
 .S RECALLREQIEN=$P($G(RECALLRET),U)
 .S RECALLREQLINK=$P($G(RECALLRET,U),2)
 .S OLDRECALLPTR=$P($G(RECALLRET,U),3)
 .D UPDCONTSEQ^SDESCONTACTS($G(DFN),$G(RECALLREQIEN),$G(RECALLREQLINK),$G(OLDRECALLPTR))
 ;
 I REQUESTTYPE="CONSULT" D
 .S PROVIDERIEN=$$GET1^DIQ(44,CLINICIEN,16,"I")
 .D REQSET^SDESCONSULTUPD(REQUESTIEN,PROVIDERIEN,"",2,CANBYCLINORPAT,NOTE,APPTSTARTTIME,RESOURCE)
 .D UPDCONTSEQ^SDESCONTACTS(DFN,REQUESTIEN)
 ;
 Q
 ;
OPENAPPTREQUEST(REQUESTIEN,APPTIEN,MRTC,PARENTREQUEST,PARENTSTATUS,DFN,CANBYCLINORPAT) ;
 N REQUESTFDA,REQUESTERR,PARENTFDA,PARENTERR,REASONALLOWSOPEN,CANEDITPID
 ;
 S REASONALLOWSOPEN=$$GET1^DIQ(409.2,$$GET1^DIQ(409.84,APPTIEN,.122,"I"),5,"I")
 S CANEDITPID=$S(CANBYCLINORPAT="C":0,CANBYCLINORPAT="PC":1,1:"")
 ;
 I REASONALLOWSOPEN'=0 D
 .S REQUESTFDA(409.85,REQUESTIEN_",",19)=""
 .S REQUESTFDA(409.85,REQUESTIEN_",",20)=""
 .S REQUESTFDA(409.85,REQUESTIEN_",",21)=""
 .; 864
 .;S REQUESTFDA(409.85,REQUESTIEN_",",23)="OPEN"
 .S REQUESTFDA(409.85,REQUESTIEN_",",23)="O"
 .S REQUESTFDA(409.85,REQUESTIEN_",",49)=CANEDITPID
 .D FILE^DIE("","REQUESTFDA","REQUESTERR") K REQUESTFDA,REQUESTERR
 ;
 ; do not re-open
 I REASONALLOWSOPEN=0 D
 .S REQUESTFDA(409.85,REQUESTIEN_",",19)=$P($$GET1^DIQ(409.84,APPTIEN,.12,"I"),".",1)
 .S REQUESTFDA(409.85,REQUESTIEN_",",20)=$$GET1^DIQ(409.84,APPTIEN,.121,"I")
 .S REQUESTFDA(409.85,REQUESTIEN_",",21)=$O(^SDEC(409.853,"B","CANCELLED NOT RE-OPENED",""))
 .S REQUESTFDA(409.85,REQUESTIEN_",",49)=CANEDITPID
 .D FILE^DIE("","REQUESTFDA","REQUESTERR") K REQUESTFDA,REQUESTERR
 ;
 I MRTC D
 .D UPDATEMRTCSEQNUM(PARENTREQUEST,DFN)
 .D REMOVEMRTCAPTIEN(REQUESTIEN,APPTIEN,PARENTREQUEST)
 .I PARENTSTATUS="C" D
 ..S PARENTFDA(409.85,PARENTREQUEST_",",19)=""
 ..S PARENTFDA(409.85,PARENTREQUEST_",",20)=""
 ..S PARENTFDA(409.85,PARENTREQUEST_",",21)=""
 ..; 864
 ..;S PARENTFDA(409.85,PARENTREQUEST_",",23)="OPEN"
 ..S PARENTFDA(409.85,PARENTREQUEST_",",23)="O"
 ..D FILE^DIE("","PARENTFDA","PARENTERR") K PARENTFDA
 Q
 ;
UPDATEMRTCSEQNUM(PARENTREQUEST,DFN) ;
 N COUNT,REQUESTIEN,IENS,NEXTSEQUENCENUM,CHILD,LASTCHILD,MRTCFDA,ERR
 ;
 S REQUESTIEN=0,COUNT=0,LASTCHILD=""
 F  S REQUESTIEN=$O(^SDEC(409.85,"B",DFN,REQUESTIEN)) Q:'REQUESTIEN  D
 .I $$GET1^DIQ(409.85,REQUESTIEN,43.8,"I")=PARENTREQUEST D
 ..I $$GET1^DIQ(409.85,REQUESTIEN,21,"I") Q
 ..S COUNT=COUNT+1
 ..S CHILD(REQUESTIEN)=COUNT
 ;
 S REQUESTIEN=0
 F  S REQUESTIEN=$O(CHILD(REQUESTIEN)) Q:'REQUESTIEN  D
 .S MRTCFDA(409.85,REQUESTIEN_",",43.1)=$G(CHILD(REQUESTIEN))
 .D FILE^DIE(,"MRTCFDA","ERR")  K MRTCFDA
 Q
 ;
REMOVEENCOUNTER(APPTIEN,ENCOUNTERIEN,APPTSTARTTIME,DFN,IENS44) ;
 N PROCESSTYPE,APPTFDA,ENCOUNTERFDA,CHILDIEN,CHILDFDA,CHILDPROCESSTYPE,VISITUPDATE,PATIENTFDA,CLINICFDA,CLINICIENS,DISPOSITIONFDA,DISPOSITIONIEN,CLASSIEN,CLASSFDA
 I '$G(ENCOUNTERIEN)!('$$EDITOK^SDCO3($G(ENCOUNTERIEN),2)) Q
 S PROCESSTYPE=$$GET1^DIQ(409.68,ENCOUNTERIEN,.08,"E")
 ;
 ; child encounters
 I $G(PROCESSTYPE),$G(PROCESSTYPE)'="CREDIT STOP CODE" D
 .S CHILDIEN=0
 .F  S CHILDIEN=$O(^SCE("APAR",ENCOUNTERIEN,CHILDIEN)) Q:'CHILDIEN  D
 ..I '$$EDITOK^SDCO3(CHILDIEN,2) Q
 ..S CHILDFDA(409.68,CHILDIEN_",",.01)="@"
 ..D FILE^DIE(,"CHILDFDA") K CHILDFDA
 ..S VISITUPDATE=$$KILL^VSITKIL($$GET1^DIQ(409.68,CHILDIEN,.05,"I"))
 ;
 ; patient file and check-in from clinic file
 I PROCESSTYPE="APPOINTMENT" D
 .S PATIENTFDA(2.98,APPTSTARTTIME_","_DFN_",",21)="@"
 .D FILE^DIE(,"PATIENTFDA") K PATIENTFDA
 .S CLINICFDA(44.003,IENS44,303)="@"
 .D FILE^DIE(,"CLINICFDA") K CLINICFDA
 ;
 ; disposition subfile in patient file
 I PROCESSTYPE="DISPOSITION" D
 .S DISPOSITIONIEN=$$GET1^DIQ(409.68,ENCOUNTERIEN,.09,"I")
 .S DISPOSITIONFDA(2.101,DISPOSITIONIEN_","_DFN_",",18)="@"
 .D FILE^DIE(,"DISPOSITIONFDA") K DISPOSITIONFDA
 ;
 ; outpatient classification file
 I '$$GET1^DIQ(409.68,ENCOUNTERIEN,.06,"I"),$O(^SDD(409.42,"AO",ENCOUNTERIEN,0))>0 D
 .S CLASSIEN=0
 .F  S CLASSIEN=$O(^SDD(409.42,"AO",ENCOUNTERIEN,CLASSIEN)) Q:'CLASSIEN  D
 ..S CLASSFDA(409.42,CLASSIEN_",",.01)="@"
 ..D FILE^DIE(,"CLASSFDA") K CLASSFDA
 ;
 ; outpatient encounter file
 S ENCOUNTERFDA(409.68,ENCOUNTERIEN_",",.01)="@"
 D FILE^DIE(,"ENCOUNTERFDA") K ENCOUNTERFDA
 S VISITUPDATE=$$KILL^VSITKIL($$GET1^DIQ(409.68,ENCOUNTERIEN,.05,"I"))
 ;
 ; delete checkout in appointment file
 I $$GET1^DIQ(409.84,APPTIEN,.14,"I") D
 .S APPTFDA(409.84,APPTIEN_",",.14)="@"
 .S APPTFDA(409.84,APPTIEN_",",.08)=$G(DUZ)
 .D FILE^DIE(,"APPTFDA") K APPTFDA
 Q
 ;
DELETEAPPTDATA(REQUESTIEN) ;
 N FDA
 S REQUESTIEN=$G(REQUESTIEN)_","
 S FDA(409.85,REQUESTIEN,13)="@"
 S FDA(409.85,REQUESTIEN,13.1)="@"
 S FDA(409.85,REQUESTIEN,13.2)="@"
 S FDA(409.85,REQUESTIEN,13.3)="@"
 S FDA(409.85,REQUESTIEN,13.4)="@"
 S FDA(409.85,REQUESTIEN,13.6)="@"
 S FDA(409.85,REQUESTIEN,13.7)="@"
 S FDA(409.85,REQUESTIEN,13.8)="@"
 S FDA(409.85,REQUESTIEN,100)=$G(EAS)
 D FILE^DIE(,"FDA") K FDA
 Q
 ;
REMOVEMRTCAPTIEN(REQUESTIEN,APPTIEN,PARENTIEN) ;
 N SUBIEN,FDA
 S SUBIEN=0
 S SUBIEN=$O(^SDEC(409.85,PARENTIEN,2,"B",REQUESTIEN,SUBIEN)) Q:'SUBIEN
 S FDA(409.852,SUBIEN_","_PARENTIEN_",",.02)="@"
 D FILE^DIE(,"FDA","FDAERR") K FDA
 Q
 ;
GET44RECORDIENS(CLINICIEN,APPTSTARTTIME,DFN) ;
 N FOUND,IENS44003
 S FOUND=0
 S SUBIEN=0 F  S SUBIEN=$O(^SC(CLINICIEN,"S",APPTSTARTTIME,1,SUBIEN)) Q:'SUBIEN!($G(FOUND)=1)  D
 .I $$GET1^DIQ(44.003,SUBIEN_","_APPTSTARTTIME_","_CLINICIEN_",",310,"E")="CANCELLED" Q
 .I $$GET1^DIQ(44.003,SUBIEN_","_APPTSTARTTIME_","_CLINICIEN_",",.01,"I")=DFN D
 ..S IENS44003=SUBIEN_","_APPTSTARTTIME_","_CLINICIEN_",",FOUND=1 Q
 Q $G(IENS44003)
 ;
CLEAN40984(APPTIEN) ;
 N FDA,IENS
 S IENS=APPTIEN_","
 S FDA(409.84,IENS,.12)=""
 S FDA(409.84,IENS,.121)=""
 S FDA(409.84,IENS,.122)=""
 S FDA(409.84,IENS,.17)=""
 S FDA(409.84,IENS,100)=""
 D FILE^DIE("","FDA") K FDA
 Q
 ;
CLEAN44003(DFN,CLINICIEN,APPTSTARTTIME,IENS44) ;
 N FDA44003,IENS,ERR44003
 S FDA44003(44.003,IENS44,310)=""
 D FILE^DIE("","FDA44003","ERR44003") K FDA44003
 Q
 ;
BEFOREEVENT(DFN,APPTSTARTTIME,CLINICIEN,SDATA) ;
 N SDDA,SDCPHDL
 S SDDA=$$SCIEN^SDECU2(DFN,CLINICIEN,APPTSTARTTIME)
 S SDCPHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_APPTSTARTTIME_U_CLINICIEN
 D BEFORE^SDAMEVT(.SDATA,DFN,APPTSTARTTIME,CLINICIEN,SDDA,SDCPHDL)
 Q $G(SDDA)
 ;
AFTEREVENT(DFN,APPTSTARTTIME,CLINICIEN,SDDA,SDATA) ;
 N SDCPHDL
 S SDCPHDL=$$HANDLE^SDAMEVT(1)
 S SDATA=SDDA_U_DFN_U_APPTSTARTTIME_U_CLINICIEN
 D CANCEL^SDAMEVT(.SDATA,DFN,APPTSTARTTIME,CLINICIEN,SDDA,2,SDCPHDL)
 Q
 ;
POPULATE(APPTIEN,APPTSTARTTIME,REQUESTTYPE,REQUESTIEN,APPTENDTIME,APPTLENGTH,APPTTYPE,RESOURCE,WALKIN,MRTC,PARENTREQUEST,PARENTSTATUS,SLOTSTATUSSTRING) ;
 S APPTSTARTTIME=$$GET1^DIQ(409.84,$G(APPTIEN),.01,"I")
 S REQUESTTYPE=$P($$GET1^DIQ(409.84,$G(APPTIEN),.22,"I"),";",2),REQUESTTYPE=$S(REQUESTTYPE="GMR(123,":"CONSULT",REQUESTTYPE="SD(403.5,":"RECALL",REQUESTTYPE="SDEC(409.85,":"APPTREQ",1:"")
 S REQUESTIEN=$P($$GET1^DIQ(409.84,$G(APPTIEN),.22,"I"),";")
 S APPTENDTIME=$$GET1^DIQ(409.84,$G(APPTIEN),.02,"I")
 S APPTLENGTH=$$GET1^DIQ(409.84,APPTIEN,.18,"I")
 S APPTTYPE=$$GET1^DIQ(409.84,APPTIEN,.06,"E")
 S RESOURCE=$$GET1^DIQ(409.84,$G(APPTIEN),.07,"I")
 S WALKIN=$$GET1^DIQ(409.84,APPTIEN,.13,"E")
 S MRTC=$$GET1^DIQ(409.85,REQUESTIEN,41,"I")
 S PARENTREQUEST=$$GET1^DIQ(409.85,REQUESTIEN,43.8,"I")
 S PARENTSTATUS=$$GET1^DIQ(409.85,PARENTREQUEST,23,"I")
 S SLOTSTATUSSTRING="#@!$* XXWVUTSRQPONMLKJIHGFEDCBA0123456789jklmnopqrstuvwxyz"
 Q
 ;
VALIDATE(APPTIEN,CLINICIEN,DFN,CANBYCLINORPAT,CANCELREASON,NOTE,CANCELHASH,EAS,NEWPID) ;
 D ORDERCHECKLOCK(.ERRORS,APPTIEN,DFN)
 D VALIDATEAPPTIEN(.ERRORS,APPTIEN)
 D VALIDATECLINIC(.ERRORS,CLINICIEN,APPTIEN)
 D VALIDATEDFN(.ERRORS,DFN,APPTIEN)
 D VALIDATECANBY(.ERRORS,CANBYCLINORPAT)
 D VALIDATECANREAS(.ERRORS,CANCELREASON)
 D VALIDATENOTE(.ERRORS,NOTE,CANCELHASH)
 D VALIDATEEAS(.ERRORS,EAS)
 D VALIDATENEWPID(.ERRORS,.NEWPID,CANBYCLINORPAT,APPTIEN)
 Q
 ;
ORDERCHECKLOCK(ERRORS,APPTIEN,DFN) ;
 N FOUND,REQUESTIEN,ORDERID,APPTREQTYPE,REQTYPE
 S APPTREQTYPE=$$GET1^DIQ(409.84,APPTIEN,.22,"I")
 S REQUESTIEN=$P($G(APPTREQTYPE),";")
 S REQTYPE=$$GET1^DIQ(409.85,REQUESTIEN,4,"I")
 I REQTYPE="RTC" D
 .S ORDERID=$$GET1^DIQ(409.85,REQUESTIEN,46,"I")
 .I '+$G(ORDERID) Q
 .I $D(^XTMP("ORPTLK-"_DFN)) D ERRLOG^SDESJSON(.ERRORS,188) S FOUND=1
 Q
 ;
VALIDATENEWPID(ERRORS,PID,CANBYCLINORPAT,APPTIEN) ;
 I $G(PID)'="" D
 .S PID=$$ISOTFM^SDAMUTDT(PID)
 .I PID=-1!($P(PID,".",2)) D ERRLOG^SDESJSON(.ERRORS,160) Q
 .I CANBYCLINORPAT="C" D ERRLOG^SDESJSON(.ERRORS,448) Q
 .I $P($$GET1^DIQ(409.84,APPTIEN,.22,"I"),";",2)="GMR(123," D ERRLOG^SDESJSON(.ERRORS,450) Q
 .N APPTREQTYPE,REQUESTIEN
 .S APPTREQTYPE=$$GET1^DIQ(409.84,APPTIEN,.22,"I")
 .S REQUESTIEN=$P($G(APPTREQTYPE),";")
 .I REQUESTIEN,$$DUPPIDCHK^SDES2CANCELAPPT(REQUESTIEN,PID) D ERRLOG^SDESJSON(.ERRORS,545) Q
 Q
 ;
VALIDATEAPPTIEN(ERRORS,APPTIEN) ;
 I APPTIEN="" D ERRLOG^SDESJSON(.ERRORS,14) Q
 I APPTIEN'="",'$D(^SDEC(409.84,APPTIEN,0)) D ERRLOG^SDESJSON(.ERRORS,15) Q
 I $$GET1^DIQ(409.84,APPTIEN,.12,"I") D ERRLOG^SDESJSON(.ERRORS,449) Q
 Q
 ;
VALIDATECANBY(ERRORS,CANBYCLINORPAT) ;
 I CANBYCLINORPAT="" D ERRLOG^SDESJSON(.ERRORS,190) Q
 I CANBYCLINORPAT'="C",CANBYCLINORPAT'="PC" D ERRLOG^SDESJSON(.ERRORS,189) Q
 Q
 ;
VALIDATECLINIC(ERRORS,CLINICIEN,APPTIEN) ;
 N RESOURCEIEN,LINKEDCLINIC
 I CLINICIEN="" D ERRLOG^SDESJSON(.ERRORS,18) Q
 I CLINICIEN'="",'$D(^SC(CLINICIEN,0)) D ERRLOG^SDESJSON(.ERRORS,19) Q
 S RESOURCEIEN=$$GET1^DIQ(409.84,APPTIEN,.07,"I")
 S LINKEDCLINIC=$$GET1^DIQ(409.831,RESOURCEIEN,.04,"I")
 I CLINICIEN'=LINKEDCLINIC D ERRLOG^SDESJSON(.ERRORS,193) Q
 Q
 ;
VALIDATEDFN(ERRORS,DFN,APPTIEN) ;
 I DFN="" D ERRLOG^SDESJSON(.ERRORS,1) Q
 I DFN'="",'$D(^DPT(DFN,0)) D ERRLOG^SDESJSON(.ERRORS,2) Q
 I $$GET1^DIQ(409.84,APPTIEN,.05,"I")'=DFN D ERRLOG^SDESJSON(.ERRORS,194) Q
 Q
 ;
VALIDATECANREAS(ERRORS,CANCELREASON) ;
 I CANCELREASON="" D ERRLOG^SDESJSON(.ERRORS,128) Q
 I '$D(^SD(409.2,"B",CANCELREASON)) D ERRLOG^SDESJSON(.ERRORS,129) Q
 S CANCELREASONIEN=$O(^SD(409.2,"B",CANCELREASON,0))
 Q
 ;
VALIDATENOTE(ERRORS,NOTE,CANCELHASH) ;
 N SDECJ
 S NOTE=$TR($G(NOTE),"^"," ") ;
 I $G(CANCELHASH)'="" F SDECJ=$L(CANCELHASH,U):-1:1 S NOTE=$P(CANCELHASH,U,SDECJ)_"_"_NOTE
 I $E(NOTE,$L(NOTE))="_" S NOTE=$E(NOTE,1,$L(NOTE)-1)
 Q NOTE
 ;
VALIDATEEAS(ERRORS,EAS) ;
 I $L(EAS) S EAS=$$EASVALIDATE^SDESUTIL($G(EAS))
 I $P($G(EAS),U)=-1 D ERRLOG^SDESJSON(.ERRORS,142) Q
 Q
 ;
BUILDJSON(JSONRETURN,RETURN) ;.
 N JSONERROR
 D ENCODE^XLFJSON("RETURN","JSONRETURN","JSONERR")
 Q
 ;