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

SDES2RECLLREQ2.m

Go to the documentation of this file.
SDES2RECLLREQ2 ; ALB/MCB - VISTA SCHEDULING CREATE/EDIT RECALL REQUESTS 2 ; MAY 05, 2026
 ;;5.3;Scheduling;**944**;Aug 13, 1993;Build 2
 ;;Per VHA Directive 6402, this routine should not be modified
 ;
 ; Reference to DUZ^XUP is supported by IA #7487
 ;
 Q  ;No Direct Call
 ;
 ;
CREATERECREQ(RETN,SDCONTEXT,SDINPUT) ;SDES2 CREATE RECALL REQUEST 2
 N CAFDA,ERRORS,SDRECREQ,SDFDA,SDMSG,SDIEN,CAERR,REQUEST
 ; Newed the following to address variables leaking from external APIs/Functions
 N %,DG,DIC,DICR,DIW
 D VALCONTEXT^SDES2VALCONTEXT(.ERRORS,.SDCONTEXT)
 I $D(ERRORS) S ERRORS("Request","IEN")="" D BUILDJSON^SDES2JSON(.RETN,.ERRORS) Q
 I $G(SDCONTEXT("USER DUZ"))'="" N DUZ D DUZ^XUP(SDCONTEXT("USER DUZ"))
 S SDINPUT("RECALL IEN")="+1"
 S SDINPUT("DATE ENTERED")=$$VALIDATERCDTNTRD(.ERRORS,$G(SDINPUT("DATE ENTERED")),SDINPUT("RECALL IEN"))
 D VALIDATE(.ERRORS,.SDINPUT)
 I $O(ERRORS("Error",""))'="" D RETURNERROR(.ERRORS,.SDRECREQ,.RETN,SDINPUT("RECALL IEN")) Q
 D BLDREC(.SDFDA,.SDINPUT,.SDCONTEXT)
 D UPDATE^DIE("","SDFDA","SDIEN","SDMSG") K SDFDA
 I $D(SDMSG) D ERRLOG^SDES2JSON(.ERRORS,134),RETURNERROR(.ERRORS,.SDRECREQ,.RETN,SDINPUT("RECALL IEN")) Q
 D BLDCOMAUD(.CAFDA,.SDINPUT,SDIEN(1),"")
 D:$D(CAFDA) UPDATE^DIE("","CAFDA","","CAERR") K CAFDA
 S SDRECREQ("Request","IEN")=SDIEN(1)
 ;
 D GETRECALL^SDES2GETRECALL(.REQUEST,SDIEN(1),SDINPUT("DFN"))
 I $D(ERRORS) M ERRORS("Request","IEN")=REQUEST("Request","IEN") D BUILDJSON^SDES2JSON(.RETN,.ERRORS) Q
 D BUILDJSON^SDES2JSON(.RETN,.REQUEST)
 Q
 ;
 ;SDES2 EDIT RECALL REQUEST 2
UPDRECALLREQ(RETN,SDCONTEXT,SDINPUT) ;RECALLIEN,DFN,ACCNO,SDCMT,FASTING,APPTP,RRPROVIEN,CLINIEN,APPTLEN,DATE,RECPPDT,DAPTDT,USERIEN,SECPDT,EAS) ;update recall request
 N CAFDA,ERRORS,LASTNOTE,SDRECREQ,SDFDA,SDMSG,SDIEN,CAERR,REQUEST
 ; Newed the following to address variables leaking from external APIs/Functions
 N DG,DIC,DICR,DIW
 D VALCONTEXT^SDES2VALCONTEXT(.ERRORS,.SDCONTEXT)
 I $D(ERRORS) S ERRORS("Request","IEN")="" D BUILDJSON^SDES2JSON(.RETN,.ERRORS) Q
 I $G(SDCONTEXT("USER DUZ"))'="" N DUZ D DUZ^XUP(SDCONTEXT("USER DUZ"))
 D VALIDATE(.ERRORS,.SDINPUT)
 I $O(ERRORS("Error",""))'="" D RETURNERROR(.ERRORS,.SDRECREQ,.RETN,SDINPUT("RECALL IEN")) Q
 S LASTNOTE=$$GET1^DIQ(403.5,SDINPUT("RECALL IEN")_",",2.5,"E")
 D BLDREC(.SDFDA,.SDINPUT,.SDCONTEXT)
 D FILE^DIE(,"SDFDA","SDMSG") K SDFDA
 I $D(SDMSG) D ERRLOG^SDES2JSON(.ERRORS,134),RETURNERROR(.ERRORS,.SDRECREQ,.RETN,SDINPUT("RECALL IEN")) Q
 D BLDCOMAUD(.CAFDA,.SDINPUT,SDINPUT("RECALL IEN"),LASTNOTE)
 D:$D(CAFDA) UPDATE^DIE("","CAFDA","","CAERR") K CAFDA
 S SDRECREQ("Request","IEN")=SDINPUT("RECALL IEN")
 ;
 D GETRECALL^SDES2GETRECALL(.REQUEST,SDINPUT("RECALL IEN"),SDINPUT("DFN"))
 I $D(ERRORS) M ERRORS("Request","IEN")=REQUEST("Request","IEN") D BUILDJSON^SDES2JSON(.RETN,.ERRORS) Q
 D BUILDJSON^SDES2JSON(.RETN,.REQUEST)
 Q
 ;
BLDREC(SDFDA,SDINPUT,SDCONTEXT) ;build and file record
 N RECALLIEN
 S RECALLIEN=SDINPUT("RECALL IEN")
 S SDFDA=$NA(SDFDA(403.5,RECALLIEN_",")) ;recall
 S SDFDA(403.5,RECALLIEN_",",.01)=SDINPUT("DFN")
 S:$G(SDINPUT("ACCESSION NUMBER"))'="" SDFDA(403.5,RECALLIEN_",",2)=$E(SDINPUT("ACCESSION NUMBER"),1,25)
 S:$G(SDINPUT("COMMENT"))'="" SDFDA(403.5,RECALLIEN_",",2.5)=$E(SDINPUT("COMMENT"),1,80)
 S SDFDA(403.5,RECALLIEN_",",2.6)=SDINPUT("FASTING")
 S SDFDA(403.5,RECALLIEN_",",3)=SDINPUT("APPOINTMENT TYPE")
 S SDFDA(403.5,RECALLIEN_",",4)=SDINPUT("RECALL PROVIDER IEN")
 S SDFDA(403.5,RECALLIEN_",",4.5)=SDINPUT("CLINIC IEN")
 S:SDINPUT("APPOINTMENT LENGTH")'="" SDFDA(403.5,RECALLIEN_",",4.7)=SDINPUT("APPOINTMENT LENGTH")
 S SDFDA(403.5,RECALLIEN_",",5)=SDINPUT("RECALL DATE")
 S:$G(SDINPUT("RECALL DATE PER PATIENT"))'="" SDFDA(403.5,RECALLIEN_",",5.5)=SDINPUT("RECALL DATE PER PATIENT")
 S:$G(SDINPUT("DATE REMINDER SENT"))'="" SDFDA(403.5,RECALLIEN_",",6)=SDINPUT("DATE REMINDER SENT")
 S SDFDA(403.5,RECALLIEN_",",7)=DUZ
 S:RECALLIEN="+1" SDFDA(403.5,RECALLIEN_",",7.5)=SDINPUT("DATE ENTERED") ;only add if creating new record, cannot edit
 S:$G(SDINPUT("SECOND PRINT DATE"))'="" SDFDA(403.5,RECALLIEN_",",8)=SDINPUT("SECOND PRINT DATE")
 S SDFDA(403.5,RECALLIEN_",",100)=$G(SDCONTEXT("ACHERON AUDIT ID"))
 Q
 ;
BLDCOMAUD(CAFDA,SDINPUT,RECALLIEN,LASTNOTE) ;
 ; 403.57 COMMENT AUDIT multiple
 Q:'$L(SDINPUT("COMMENT"))
 N LASTLENGTH,NEWLENGTH,NEWNOTE
 S LASTLENGTH=$L(LASTNOTE),NEWLENGTH=$L(SDINPUT("COMMENT"))
 S NEWNOTE=$E($E(SDINPUT("COMMENT"),1,80),(LASTLENGTH+1),NEWLENGTH)
 Q:'$L(NEWNOTE)
 S CAFDA(403.57,"+1,"_RECALLIEN_",",.01)=$$NOW^XLFDT
 S CAFDA(403.57,"+1,"_RECALLIEN_",",1)=DUZ
 S CAFDA(403.57,"+1,"_RECALLIEN_",",2)=NEWNOTE
 Q
 ;
VALIDATE(ERRORS,SDINPUT) ;
 N OLDDFN
 S OLDDFN=""
 S SDINPUT("RECALL IEN")=$$VALIDATERECALIEN(.ERRORS,$G(SDINPUT("RECALL IEN")))
 I '$D(ERRORS),SDINPUT("RECALL IEN")'="+1" S OLDDFN=$$GET1^DIQ(403.5,SDINPUT("RECALL IEN"),.01,"I")
 S SDINPUT("DFN")=$$VALIDATEDFN(.ERRORS,$G(SDINPUT("DFN")),OLDDFN)
 S SDINPUT("FASTING")=$$VALIDATEFASTING(.ERRORS,$G(SDINPUT("FASTING")))
 S SDINPUT("APPOINTMENT TYPE")=$$VALIDATEAPPTP(.ERRORS,$G(SDINPUT("APPOINTMENT TYPE")))
 S SDINPUT("RECALL PROVIDER IEN")=$$VALIDATERRPRVIEN(.ERRORS,$G(SDINPUT("RECALL PROVIDER IEN")))
 S SDINPUT("CLINIC IEN")=$$VALIDATECLINIEN(.ERRORS,$G(SDINPUT("CLINIC IEN")))
 S SDINPUT("RECALL DATE")=$$VALIDATERECALLDT(.ERRORS,$G(SDINPUT("RECALL DATE")))
 S SDINPUT("APPOINTMENT LENGTH")=$$VALIDATEAPPTLEN(.ERRORS,$G(SDINPUT("APPOINTMENT LENGTH")))
 S SDINPUT("RECALL DATE PER PATIENT")=$$VALIDATERECPPDT(.ERRORS,$G(SDINPUT("RECALL DATE PER PATIENT")))
 S SDINPUT("DATE REMINDER SENT")=$$VALIDATEDAPTDT(.ERRORS,$G(SDINPUT("DATE REMINDER SENT")))
 S SDINPUT("SECOND PRINT DATE")=$$VALIDATESECPDT(.ERRORS,$G(SDINPUT("SECOND PRINT DATE")))
 S SDINPUT("COMMENT")=$$VALIDATESDCMT(.ERRORS,$G(SDINPUT("COMMENT")))
 S SDINPUT("ACCESSION NUMBER")=$$VALIDATEACCNUM(.ERRORS,$G(SDINPUT("ACCESSION NUMBER")))
 Q
 ;
VALIDATERECALIEN(ERRORS,RECALLIEN) ;Validate Recall IEN
 I $G(RECALLIEN)="" D ERRLOG^SDES2JSON(.ERRORS,16) Q RECALLIEN
 I (RECALLIEN'="+1")&('$D(^SD(403.5,$G(RECALLIEN)))) D ERRLOG^SDES2JSON(.ERRORS,17) Q RECALLIEN
 ;check that user has the correct security key
 I $$KEY(RECALLIEN)>0 D ERRLOG^SDES2JSON(.ERRORS,135)
 Q RECALLIEN
 ;
VALIDATEDFN(ERRORS,DFN,OLDDFN) ;Validate Patient DFN
 D VALPATDFN^SDES2VAL2(.ERRORS,$G(DFN),1)
 I DFN'="",OLDDFN'="",DFN'=OLDDFN D ERRLOG^SDES2JSON(.ERRORS,2,"Patient ID on Recall doesn't match passed in Patient ID")
 Q DFN
 ;
VALIDATEFASTING(ERRORS,FASTING) ;Validate Fasting
 I FASTING="" D ERRLOG^SDES2JSON(.ERRORS,141) Q FASTING
 S FASTING=$S($$UP^XLFSTR(FASTING)="FASTING":"f",$$UP^XLFSTR(FASTING)="NON-FASTING":"n",$$UP^XLFSTR(FASTING)="F":"f",$$UP^XLFSTR(FASTING)="N":"n",FASTING="@":"@",1:138)
 I FASTING=138 D ERRLOG^SDES2JSON(.ERRORS,138)
 Q FASTING
 ;
VALIDATEAPPTP(ERRORS,APPTP) ;Validate Appointment Type from RECALL REMINDERS APPT TYPE (#403.51)
 I APPTP="" D ERRLOG^SDES2JSON(.ERRORS,139) Q APPTP
 S APPTP=$O(^SD(403.51,"B",APPTP,""))
 I +APPTP,$D(^SD(403.51,APPTP,0)) Q APPTP
 I +APPTP,'$D(^SD(403.51,APPTP,0)) D ERRLOG^SDES2JSON(.ERRORS,132) Q APPTP
 I APPTP="" D ERRLOG^SDES2JSON(.ERRORS,139) Q APPTP
 Q APPTP
 ;
VALIDATERRPRVIEN(ERRORS,RRPROVIEN) ;Validate Recall Provider IEN
 I RRPROVIEN="" D ERRLOG^SDES2JSON(.ERRORS,137) Q RRPROVIEN
 I $G(RRPROVIEN)'="",'$D(^SD(403.54,RRPROVIEN)) D ERRLOG^SDES2JSON(.ERRORS,131)
 Q RRPROVIEN
 ;
VALIDATECLINIEN(ERRORS,CLINIEN) ;Validate Clinic IEN
 I CLINIEN="" D ERRLOG^SDES2JSON(.ERRORS,18) Q CLINIEN
 I CLINIEN'="",'$D(^SC(CLINIEN)) D ERRLOG^SDES2JSON(.ERRORS,19)
 Q CLINIEN
 ;
VALIDATERECALLDT(ERRORS,RECALLDATE) ;Validate Recall Date
 I RECALLDATE="" D ERRLOG^SDES2JSON(.ERRORS,140) Q RECALLDATE
 I RECALLDATE'="" S RECALLDATE=$$ISOTFM^SDAMUTDT(RECALLDATE)
 I RECALLDATE=-1 D ERRLOG^SDES2JSON(.ERRORS,133)
 Q RECALLDATE
 ;
VALIDATERCDTNTRD(ERRORS,RECDTENTRD,RECALLIEN) ;Validate Recall Date Entered
 I RECALLIEN'="+1" Q ""  ; This is an IEN, so can't edit Recall Date Entered
 I ($G(RECDTENTRD)'="") S RECDTENTRD=$$ISOTFM^SDAMUTDT(RECDTENTRD)
 I (RECDTENTRD=-1)!(RECDTENTRD="") S RECDTENTRD=DT ;
 Q RECDTENTRD
 ;
VALIDATEAPPTLEN(ERRORS,LENGTHOFAPPT) ;Validate Length of Appointment
 S LENGTHOFAPPT=$G(LENGTHOFAPPT,"") I LENGTHOFAPPT="" Q LENGTHOFAPPT
 I '+LENGTHOFAPPT D ERRLOG^SDES2JSON(.ERRORS,116) Q LENGTHOFAPPT
 I LENGTHOFAPPT'="" S:((+LENGTHOFAPPT<10)!(+LENGTHOFAPPT>240)) LENGTHOFAPPT=""
 Q LENGTHOFAPPT
 ;
VALIDATERECPPDT(ERRORS,RECPPTDT) ;Validate Recall Date Per Patient
 S RECPPTDT=$G(RECPPTDT,"") S RECPPTDT=$$ISOTFM^SDAMUTDT(RECPPTDT)
 I RECPPTDT=-1 S RECPPTDT=""  ;VSE-2396
 Q RECPPTDT
 ;
VALIDATEDAPTDT(ERRORS,DTRMSENT) ;Validate Date Reminder Sent
 S DTRMSENT=$G(DTRMSENT,"")
 S DTRMSENT=$$ISOTFM^SDAMUTDT(DTRMSENT)
 I DTRMSENT=-1 S DTRMSENT=""  ;VSE-2396
 Q DTRMSENT
 ;
VALIDATESECPDT(ERRORS,SECPRNTDT) ;Validate Second Print Date
 S SECPRNTDT=$G(SECPRNTDT,"")
 I SECPRNTDT'="" S SECPRNTDT=$$ISOTFM^SDAMUTDT(SECPRNTDT)
 I SECPRNTDT=-1 S SECPRNTDT=""  ;VSE-2396
 Q SECPRNTDT
 ;
VALIDATESDCMT(ERRORS,SDCMT) ;Validate Comment
 S SDCMT=$$CLEANCMMTS^SDES2APPTUTIL(SDCMT)
 Q SDCMT
 ;
VALIDATEACCNUM(ERRORS,SDACC) ;Validate ACCESSION NUMBER
 S SDACC=$G(SDACC,"")
 S SDACC=$TR($G(SDACC),"^"," ")
 Q SDACC
 ;
RETURNERROR(ERRORS,SDRECREQ,RETN,REQIEN) ;
 M SDRECREQ=ERRORS
 D SETEMPTYOBJ(.SDRECREQ,REQIEN)
 D BUILDJSON^SDES2JSON(.RETN,.SDRECREQ)
 Q
 ;
SETEMPTYOBJ(SDRECREQ,SDCREATE) ;Set the object to NULL
 I SDCREATE="+1" S SDRECREQ("Request","IEN")="" Q
 S SDRECREQ("Request","IEN")=""
 Q
 ;
KEY(RECALLIEN) ;check that user has the correct SECURITY KEY
 ;INPUT:
 ; RECALLIEN - Pointer to RECALL REMINDERS file 403.5
 ;RETURN
 ;  0=User has the correct SECURITY KEY
 ;  135=error number - user does not have correct security keys
 N KEY,KY,RET,SDPRV,SDFLAG
 S RET=135
 S (SDPRV,KEY,SDFLAG)="" S SDPRV=$P($G(^SD(403.5,+RECALLIEN,0)),U,5) D
 .I SDPRV="" S RET=0
 .I SDPRV'="" S KEY=$P($G(^SD(403.54,SDPRV,0)),U,7) D
 ..I KEY="" S RET=0 Q
 ..N VALUE
 ..S VALUE=$$LKUP^XPDKEY(KEY) K KY D OWNSKEY^XUSRB(.KY,VALUE)
 ..I $G(KY(0))'=0 S RET=0
 Q RET
 ;