SDESCONTACTS ;ALB/BWF,JAS - VISTA SCHEDULING CONTACT RPCS ;AUG 28, 2024
;;5.3;Scheduling;**835,837,845,851,887**;Aug 13, 1993;Build 7
;;Per VHA Directive 6402, this routine should not be modified
Q
; RPC: SDES CONTACT NEW
; INPUT:
;CONTACT("CLINIC")=CLINIC IEN
;- Clinic IEN from the HOSPITAL LOCATION FILE (#44
;CONTACT("COMMENTS")=COMMENTS
;- Free text comments (1-80 characters)
;CONTACT("CONTACTIEN")=CONTACT IEN
;- IEN of the main contact entry in the SDEC CONTACT file (#409.86)
;CONTACT("CONTACTTYPE")=CONTACT TYPE
;- Contact Type (C - Call, L - Letter, E - Email, T - Text, S - Secure messaging)
;CONTACT("DFN")=PATIENT DFN
;- Pointer to the PATIENT file (#2)
;CONTACT("DTTMENTERED")=DATE/TIME ENTERED (ISO FORMAT)
;- ISO Date/Time
;CONTACT("DTTMOFCONTACT")=DATE/TIME OF CONTACT (ISO FORMAT)
;- ISO Date/Time
;CONTACT("LEFTMESSAGE")=0 for no, 1 for yes
;CONTACT("PREFDATE")=PREFERRED DATE (ISO FORMAT)
;- ISO Date
;CONTACT("REQTYPE")=REQUEST TYPE
;- Request Type (A - APPT, R - RECALL, C - CONSULT)
;CONTACT("REQUESTIEN")=REQUEST IEN
;- Request IEN (Variable pointer) based on the request type
; A - SDEC APPT REQUEST (#409.85)
; C - REQUEST/CONSULTATION file (#123)
; R - RECALL REQUEST file (#403.5)
;
ADDUPD(RESULT,CONTACT) ;
N ERRORS,DFN,CLINIC,PREFDATE,REQTYPE,DTTMOFCONTACT,CONTACTTYPE,COMMENTS,DTTMENTERED,REQUESTIEN,NEWCONTACT
N NEWIEN,SDREQPTR40986,REQTYPE40985,FILERR,FDA,NEWCONTIEN,SUBIENS,CONTACTIEN,SEQUENCE,LEFTMSG,NEWCONTATTMTIEN
S DFN=$G(CONTACT("DFN"))
S CLINIC=$G(CONTACT("CLINIC"))
S PREFDATE=""
S REQTYPE=$G(CONTACT("REQTYPE"))
S DTTMOFCONTACT=$G(CONTACT("DTTMOFCONTACT"))
S CONTACTTYPE=$G(CONTACT("CONTACTTYPE"))
S COMMENTS=$G(CONTACT("COMMENTS"))
S DTTMENTERED=$G(CONTACT("DTTMENTERED"))
S REQUESTIEN=$G(CONTACT("REQUESTIEN"))
S LEFTMSG=$G(CONTACT("LEFTMESSAGE"))
I LEFTMSG="" S LEFTMSG=0
D VALIDATEDFN^SDESINPUTVALUTL(.ERRORS,DFN)
I CLINIC'="" D VALIDATECLINIC(.ERRORS,CLINIC)
I $D(ERRORS) S ERRORS("Contact",1)="" D BUILDJSON^SDESBUILDJSON(.RESULT,.ERRORS) Q
D VALREQTYPE(.ERRORS,REQTYPE,"^R^A^RTC^C^P^V^")
I $G(LEFTMSG)'="" D VALLEFTMSG(.ERRORS,LEFTMSG)
S DTTMOFCONTACT=$$VALDATE2^SDESVALUTIL(.ERRORS,DTTMOFCONTACT,CLINIC,389,390)
; validate text input based on field definition
D VALTEXTINPUT(.ERRORS,COMMENTS,409.863,2,1)
S DTTMENTERED=$$VALDATE2^SDESVALUTIL(.ERRORS,DTTMENTERED,CLINIC,387,388)
I $D(ERRORS) S ERRORS("Contact",1)="" D BUILDJSON^SDESBUILDJSON(.RESULT,.ERRORS) Q
D VALREQIEN(.ERRORS,REQUESTIEN,REQTYPE)
D VALSETOFCODES(.ERRORS,CONTACTTYPE,409.863,1,"Contact Type")
S CONTACTIEN=$$GETCONTIEN(.ERRORS,REQUESTIEN,REQTYPE)
I $D(ERRORS) S ERRORS("Contact",1)="" D BUILDJSON^SDESBUILDJSON(.RESULT,.ERRORS) Q
I REQUESTIEN D
.S SDREQPTR40986=""
.I (REQTYPE="A")!(REQTYPE="RTC")!(REQTYPE="V") D
..Q:$$GET1^DIQ(409.85,REQUESTIEN,.01,"I")'=DFN
..S REQTYPE40985=$$GET1^DIQ(409.85,REQUESTIEN,4,"I")
..I REQTYPE40985'="APPT",REQTYPE40985'="RTC",REQTYPE40985'="VETERAN" Q
..S SDREQPTR40986=REQUESTIEN_";"_"SDEC(409.85,"
..S PREFDATE=$$GET1^DIQ(409.85,REQUESTIEN,22,"I")
.Q:SDREQPTR40986'=""
.I REQTYPE="C"!(REQTYPE="P") D
..Q:$$GET1^DIQ(123,REQUESTIEN,.02,"I")'=DFN
..Q:$$GET1^DIQ(123,REQUESTIEN,13,"I")'=REQTYPE
..Q:CLINIC'=""&(CLINIC'=$$GET1^DIQ(123,REQUESTIEN,.04,"I"))
..S SDREQPTR40986=REQUESTIEN_";"_"GMR(123,"
..I $D(^SDEC(409.87,"B",REQUESTIEN)) S PREFDATE=$$GETPID^SDECCONSJSON(REQUESTIEN)
..I '$D(^SDEC(409.87,"B",REQUESTIEN))!(PREFDATE="") S PREFDATE=$$GET1^DIQ(123,REQUESTIEN,17,"I")
.Q:SDREQPTR40986'=""
.I REQTYPE="R" D
..Q:$$GET1^DIQ(403.5,REQUESTIEN,.01,"I")'=DFN
..I CLINIC'="",$$GET1^DIQ(403.5,REQUESTIEN,4.5,"I")'=CLINIC Q
..S SDREQPTR40986=REQUESTIEN_";"_"SD(403.5,"
..S PREFDATE=$$GET1^DIQ(403.5,REQUESTIEN,5,"I")
I $G(SDREQPTR40986)="" D Q
.D ERRLOG^SDESJSON(.ERRORS,394)
.S ERRORS("Contact",1)=""
.D BUILDJSON^SDESBUILDJSON(.RESULT,.ERRORS)
I $G(PREFDATE)="" D
.D ERRLOG^SDESJSON(.ERRORS,408)
I $D(ERRORS) D Q
.S ERRORS("Contact",1)=""
.D BUILDJSON^SDESBUILDJSON(.RESULT,.ERRORS)
I 'CONTACTIEN D
.D BLDNEWCONT(.FDA,"+1,",DFN,CLINIC,PREFDATE,REQTYPE,SDREQPTR40986)
.S SUBIENS="+2,+1,"
.D BLDNEWATTMPT(.FDA,SUBIENS,DTTMOFCONTACT,CONTACTTYPE,COMMENTS,DUZ,DTTMENTERED,LEFTMSG,1)
; if there is already a contactien, only build the Date/Time of contact subfile (#409.863) for filing
I CONTACTIEN D
.S SUBIENS="+1,"_CONTACTIEN_","
.S SEQUENCE=$O(^SDEC(409.86,CONTACTIEN,1,9999),-1)+1
.D BLDNEWATTMPT(.FDA,SUBIENS,DTTMOFCONTACT,CONTACTTYPE,COMMENTS,DUZ,DTTMENTERED,LEFTMSG,SEQUENCE)
D UPDATE^DIE(,"FDA","NEWIEN","FILERR") K FDA
I $D(FILERR) D Q
.D ERRLOG^SDESJSON(.ERRORS,52,$G(FILERR("DIERR",1,"TEXT",1)))
.S ERRORS("Contact",1)=""
.D BUILDJSON^SDESBUILDJSON(.RESULT,.ERRORS)
I CONTACTIEN D
.S NEWCONTATTMTIEN=$G(NEWIEN(1))
I 'CONTACTIEN D
.S CONTACTIEN=$G(NEWIEN(1))
.S NEWCONTATTMTIEN=$G(NEWIEN(2))
; Update the preferred date/PID date if it is different than the request pid date
I PREFDATE'=$$GET1^DIQ(409.68,CONTACTIEN,2,"I") D
.S FDA(409.68,CONTACTIEN_",",2)=PREFDATE D FILE^DIE(,"FDA") K FDA
D BLDCONTACT(.NEWCONTACT,CONTACTIEN,CLINIC)
I '$D(NEWCONTACT) S NEWCONTACT("Contact",1)="" D BUILDJSON^SDESBUILDJSON(.RESULT,.CONTACTS) Q
D DISPMULT(.NEWCONTACT,CONTACTIEN,CLINIC)
D BUILDJSON^SDESBUILDJSON(.RESULT,.NEWCONTACT)
Q
; return the contact ien based on the full pointer reference
GETCONTIEN(ERRORS,REQIEN,REQTYPE) ;
N TRGTFILE,TRGTFLD,FILEROOT,FULLREF,CONTACTDFN,TRGTDFN,CONTACTIEN,TRGTDFNFLD
S TRGTFILE=$S("^A^RTC^V^"[(U_REQTYPE_U):409.85,"^C^P^"[(U_REQTYPE_U):123,REQTYPE="R":403.5,1:"")
S TRGTDFNFLD=$S(TRGTFILE=409.85!(TRGTFILE="403.5"):.01,TRGTFILE=123:.02,1:"")
S FILEROOT=$$ROOT^DILFD(TRGTFILE)
S FULLREF=REQIEN_";"_$P(FILEROOT,U,2)
I '$L(FULLREF) D Q ""
.D ERRLOG^SDESJSON(.ERRORS,391)
; If this entry doesn't exist, return "", because it is a NEW entry
I '$D(^SDEC(409.86,"REQPTR",FULLREF)) Q ""
S CONTACTIEN=$O(^SDEC(409.86,"REQPTR",FULLREF,"A"),-1)
I 'CONTACTIEN D Q ""
.D ERRLOG^SDESJSON(.ERRORS,392)
S CONTACTDFN=$$GET1^DIQ(409.86,CONTACTIEN,.01,"I")
S TRGTDFN=$$GET1^DIQ(TRGTFILE,REQIEN,TRGTDFNFLD,"I")
; check for DFN match
I CONTACTDFN'=TRGTDFN D Q ""
.D ERRLOG^SDESJSON(.ERRORS,393)
Q CONTACTIEN
; add a new entry SDEC CONTACTS file (#409.86)
BLDNEWCONT(FDA,IENS,DFN,CLINIC,PREFDATE,REQTYPE,SDREQPTR40986) ;=
S FDA(409.86,IENS,.01)=DFN
S FDA(409.86,IENS,1)=CLINIC
S FDA(409.86,IENS,2)=PREFDATE
S FDA(409.86,IENS,2.1)=REQTYPE
; Main Sequence (2.2) is always set to 1 initially
S FDA(409.86,IENS,2.2)=1
S FDA(409.86,IENS,2.3)=SDREQPTR40986
Q
; add a new entry to the Date/time of contact multiple in the SDEC CONTACTS file (#409.86)
BLDNEWATTMPT(FDA,IENS,DTTMOFCONTACT,CONTACTTYPE,COMMENTS,DUZ,DTTMENTERED,LEFTMSG,SEQUENCE) ;
S FDA(409.863,IENS,.01)=DTTMOFCONTACT
S FDA(409.863,IENS,1)=CONTACTTYPE
S FDA(409.863,IENS,2)=COMMENTS
S FDA(409.863,IENS,3)=$G(LEFTMSG)
; The first entry in this subfile will always be 1
S FDA(409.863,IENS,4)=SEQUENCE
S FDA(409.863,IENS,5)=$G(DUZ)
S FDA(409.863,IENS,6)=DTTMENTERED
Q
;
; SDES CONTACT DISPLAY SINGLE
DISPLAY(RESULT,REQTYPE,REQIEN) ;
N ERRORS,CONTACTIEN,RECALLP01,APPTREQP01,CONTACTP01,CONSULTP02,VPTR,CONTACTS
S REQTYPE=$G(REQTYPE),REQIEN=$G(REQIEN)
D VALREQTYPE(.ERRORS,REQTYPE,"^R^A^RTC^C^P^V^")
I $D(ERRORS) S ERRORS("Contact",1)="" D BUILDJSON^SDESBUILDJSON(.RESULT,.ERRORS) Q
D VALREQIEN(.ERRORS,REQIEN,REQTYPE)
I $D(ERRORS) S ERRORS("Contact",1)="" D BUILDJSON^SDESBUILDJSON(.RESULT,.ERRORS) Q
S CONTACTIEN=$$GETCONTIEN(.ERRORS,REQIEN,REQTYPE)
I 'CONTACTIEN S ERRORS("Contact",1)="" D BUILDJSON^SDESBUILDJSON(.RESULT,.ERRORS) Q
S VPTR=$$GET1^DIQ(409.86,CONTACTIEN,2.3,"I")
I $P(VPTR,";")'=REQIEN D Q
.S ERRORS("Contact",1)=""
.D ERRLOG^SDESJSON(.ERRORS,394)
.D BUILDJSON^SDESBUILDJSON(.RESULT,.ERRORS)
D BLDCONTACT(.CONTACTS,CONTACTIEN)
I $D(ERRORS) S ERRORS("Contact",1)="" D BUILDJSON^SDESBUILDJSON(.RESULT,.ERRORS) Q
I '$D(CONTACTS) S CONTACTS("Contact",1)="" D BUILDJSON^SDESBUILDJSON(.RESULT,.CONTACTS) Q
D DISPMULT(.CONTACTS,CONTACTIEN)
D BUILDJSON^SDESBUILDJSON(.RESULT,.CONTACTS)
Q
DISPMULT(RESULT,CONTACTIEN,CLINIC) ;
; RPC: SDES CONTACT MULTI-DISPLAY
N ERRORS,CONTMULT,CIENS,CONTDATA,CCNT,CONTACTS,CONTDATE,DTTMENTERED
S CONTACTIEN=$G(CONTACTIEN)
S CCNT=0
S CONTMULT=0 F S CONTMULT=$O(^SDEC(409.86,CONTACTIEN,1,CONTMULT)) Q:'CONTMULT D
.S CIENS=CONTMULT_","_CONTACTIEN_","
.D GETS^DIQ(409.863,CIENS,"**","IE","CONTDATA","CERR")
.I $D(CERR) K CERR Q
.I '$G(CLINIC) S CLINIC=$$GET1^DIQ(409.86,CONTACTIEN,1,"I")
.S CCNT=CCNT+1
.S CONTDATE=$G(CONTDATA(409.863,CIENS,.01,"I"))
.S CONTDATE=$$FMTISO^SDAMUTDT(CONTDATE,$G(CLINIC))
.S CONTACTS("ContactAttempts",CCNT,"DateTimeOfContact")=CONTDATE
.S CONTACTS("ContactAttempts",CCNT,"Type")=$G(CONTDATA(409.863,CIENS,1,"E"))
.S CONTACTS("ContactAttempts",CCNT,"Comments")=$G(CONTDATA(409.863,CIENS,2,"E"))
.S CONTACTS("ContactAttempts",CCNT,"LeftMessage")=$G(CONTDATA(409.863,CIENS,3,"E"))
.S CONTACTS("ContactAttempts",CCNT,"Sequence")=$G(CONTDATA(409.863,CIENS,4,"E"))
.S CONTACTS("ContactAttempts",CCNT,"EnteredByName")=$G(CONTDATA(409.863,CIENS,5,"E"))
.S CONTACTS("ContactAttempts",CCNT,"EnteredByIEN")=$G(CONTDATA(409.863,CIENS,5,"I"))
.S CONTACTS("ContactAttempts",CCNT,"EnteredBySecID")=$$GET1^DIQ(200,$G(CONTDATA(409.863,CIENS,5,"I")),205.1,"E")
.S DTTMENTERED=$$FMTISO^SDAMUTDT($G(CONTDATA(409.863,CIENS,6,"I")),$G(CLINIC))
.S CONTACTS("ContactAttempts",CCNT,"DateTimeEntered")=DTTMENTERED
.K CONTDATA
I '$D(CONTACTS) S CONTACTS("ContactAttempts",1)=""
M RESULT=CONTACTS
Q
BLDCONTACT(RESULT,IEN,CLINIC) ;
N F,IENS,ERR,PREFDATE,STOPIEN
S F=409.86,IENS=IEN_","
D GETS^DIQ(409.86,IENS,"**","IE","CONTDATA","ERR")
Q:$D(ERR)
I '$G(CLINIC) S CLINIC=$G(CONTDATA(F,IENS,1,"I"))
S PREFDATE=$$FMTISO^SDAMUTDT($G(CONTDATA(F,IENS,2,"I")),$G(CLINIC))
I PREFDATE<0 S PREFDATE=""
S RESULT("Contact","ID")=$P(IENS,",")
S RESULT("Contact","Patient")=$G(CONTDATA(F,IENS,.01,"I"))
S RESULT("Contact","Clinic")=$G(CONTDATA(F,IENS,1,"I"))
S STOPIEN=$$GET1^DIQ(44,CLINIC,8,"I")
S RESULT("Contact","ClinicStopCodeAMIS")=$$STOPCODETOAMIS^SDESUTIL(STOPIEN)
S RESULT("Contact","PreferredDate")=PREFDATE
S RESULT("Contact","RequestType")=$G(CONTDATA(F,IENS,2.1,"I"))
S RESULT("Contact","MainSequence")=$G(CONTDATA(F,IENS,2.2,"I"))
N SRVSTRING
S SRVSTRING=$$GETSRV^SDES2CONTACTS($G(CONTDATA(F,IENS,2.1,"I")),+$G(CONTDATA(F,IENS,2.3,"I")))
S RESULT("Contact","Service")=$P($G(SRVSTRING),"^")
S RESULT("Contact","ServiceName")=$P($G(SRVSTRING),"^",2)
S RESULT("Contact","RequestPointer")=$G(CONTDATA(F,IENS,2.3,"I"))
K CONTDATA
Q
; RECALLREQPTR is needed to find the old CONTACT entry tied to a RECALL REMINDER and re-point it to the new entry
; NEWREQLINK is ONLY passed in if this was a recall request that is being reopened as an appointment request
; REQIEN is the 409.85 request ien for CONSULTS and APPT type records
UPDCONTSEQ(DFN,REQIEN,NEWREQLINK,RECALLREQPTR) ; update contact attempts main sequence
N IEN40986,REC409860,FOUND,SDECFDA,REC40986PTR
S IEN40986="",FOUND=0
F S IEN40986=$O(^SDEC(409.86,"B",DFN,IEN40986)) Q:IEN40986=""!(FOUND) D
.S REC40986PTR=$P($$GET1^DIQ(409.86,IEN40986,2.3,"I"),";")
.I $G(RECALLREQPTR),$G(RECALLREQPTR)'=+REC40986PTR Q
.I '$G(RECALLREQPTR),REQIEN'=REC40986PTR Q
.K SDECFDA
.S SDECFDA(409.86,IEN40986_",",2.2)=$O(^SDEC(409.86,IEN40986,1,9999),-1)+1
.I $G(NEWREQLINK)]"" D
..S SDECFDA(409.86,IEN40986_",",2.1)="A"
..S SDECFDA(409.86,IEN40986_",",2.3)=NEWREQLINK
.D FILE^DIE("","SDECFDA") K SDECFDA
.S FOUND=1
Q
; validate clinic
VALIDATECLINIC(ERRORS,CLINICIEN) ;
I '$D(^SC(CLINICIEN,0)) D ERRLOG^SDESJSON(.ERRORS,19) Q
Q
; validate contact request type
VALREQTYPE(ERRORS,REQTYPE,RESTRICT2LIST) ;
N RESULTS,CONT,CODE,INTCODE,FOUND
I REQTYPE="" D ERRLOG^SDESJSON(.ERRORS,395)
D FIELD^DID(409.86,2.1,"","SET OF CODES","RESULTS")
S FOUND=0
F CONT=1:1:$L(RESULTS("SET OF CODES"),";") D Q:FOUND
.S CODE=$P(RESULTS("SET OF CODES"),";",CONT) Q:'$L(CODE)
.S INTCODE=$P(CODE,":")
.I $G(RESTRICT2LIST)]"",RESTRICT2LIST'[(U_INTCODE_U) Q
.I REQTYPE=INTCODE S FOUND=1 Q
I 'FOUND D ERRLOG^SDESJSON(.ERRORS,396)
Q
; validate request ien
VALREQIEN(ERRORS,REQIEN,REQTYPE) ;
I REQIEN="" D ERRLOG^SDESJSON(.ERRORS,3) Q
I (REQTYPE="A")!(REQTYPE="RTC")!(REQTYPE="V"),'$D(^SDEC(409.85,REQIEN)) D ERRLOG^SDESJSON(.ERRORS,4) Q
I (REQTYPE="C")!(REQTYPE="P"),'$D(^GMR(123,REQIEN)) D ERRLOG^SDESJSON(.ERRORS,4) Q
I REQTYPE="R",'$D(^SD(403.5,REQIEN)) D ERRLOG^SDESJSON(.ERRORS,4) Q
Q
; validate contact ien
VALIDATECONTIEN(ERRORS,CONTACTIEN) ;
I CONTACTIEN="" D ERRLOG^SDESJSON(.ERRORS,398) Q
I '$D(^SDEC(409.86,CONTACTIEN)) D ERRLOG^SDESJSON(.ERRORS,399) Q
Q
VALCONTTYPE(ERRORS,TYPE) ;
N RESULTS,CONT,CODE,INTCODE,FOUND,CODEINC,CODESET,FULLCODE
I TYPE="" D ERRLOG^SDESJSON(.ERRORS,400)
D FIELD^DID(409.863,1,"","SET OF CODES","RESULTS")
S CODESET=$G(RESULTS("SET OF CODES"))
S FOUND=0
F CODEINC=1:1:$L(CODESET,";") D Q:FOUND
.S FULLCODE=$P(CODESET,";",CODEINC)
.S INTCODE=$P(FULLCODE,":")
.Q:INTCODE'=TYPE
.S FOUND=1
I 'FOUND D ERRLOG^SDESJSON(.ERRORS,401)
Q
; FILE - file where the set of codes field lives
; FLD - set of codes field
; VALUE - value to validate
; TEXT - meaningful sentence predicate to return. This will be proceeded by 'Missing set of codes value' or "Invalid set of codes value"
; - (i.e, contact attempt type, appointment type)
VALSETOFCODES(ERRORS,VALUE,FILE,FLD,TEXT) ;
N RESULTS,CONT,CODE,INTCODE,FOUND,RESULTS,ITEM
I VALUE="" D ERRLOG^SDESJSON(.ERRORS,52,"Missing set of codes value: "_TEXT_".") Q
D FIELD^DID(FILE,FLD,"","SET OF CODES","RESULTS")
S FOUND=0
F ITEM=1:1:$L(RESULTS("SET OF CODES"),";") D Q:FOUND
.S CODE=$P(RESULTS("SET OF CODES"),";",ITEM) Q:'$L(CODE)
.S INTCODE=$P(CODE,":")
.I VALUE=INTCODE S FOUND=1 Q
I 'FOUND D ERRLOG^SDESJSON(.ERRORS,52,"Invalid set of codes value: "_TEXT_": '"_VALUE_"'.")
Q
VALTEXTINPUT(ERRORS,COMMENTS,FILE,FLD,REQUIRED) ;
N X,INPUTCHK,RESULTS,LABEL,HELPTEXT
D FIELD^DID(FILE,FLD,"","INPUT TRANSFORM;HELP-PROMPT;LABEL","RESULTS")
S INPUTCHK=$G(RESULTS("INPUT TRANSFORM"))
S HELPTEXT=$G(RESULTS("HELP-PROMPT"))
S LABEL=$G(RESULTS("LABEL"))
I $G(REQUIRED),'$L($G(COMMENTS)) D ERRLOG^SDESJSON(.ERRORS,52,"Missing field: "_$S($L($G(LABEL)):LABEL_".",1:"Unknown Text Field.")) Q
S X=COMMENTS
X INPUTCHK
I '$D(X) D ERRLOG^SDESJSON(.ERRORS,52,HELPTEXT)
Q
VALCONTACTIEN(ERRORS,IEN) ;
I 'IEN D ERRLOG^SDESJSON(.ERRORS,398) Q
I '$D(^SDEC(409.86,IEN)) D ERRLOG^SDESJSON(.ERRORS,399)
Q
VALLEFTMSG(ERRORS,LEFTMSG) ;
I LEFTMSG'=0,LEFTMSG'=1 D ERRLOG^SDESJSON(.ERRORS,402)
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HSDESCONTACTS 14958 printed Oct 16, 2024@18:56:44 Page 2
SDESCONTACTS ;ALB/BWF,JAS - VISTA SCHEDULING CONTACT RPCS ;AUG 28, 2024
+1 ;;5.3;Scheduling;**835,837,845,851,887**;Aug 13, 1993;Build 7
+2 ;;Per VHA Directive 6402, this routine should not be modified
+3 QUIT
+4 ; RPC: SDES CONTACT NEW
+5 ; INPUT:
+6 ;CONTACT("CLINIC")=CLINIC IEN
+7 ;- Clinic IEN from the HOSPITAL LOCATION FILE (#44
+8 ;CONTACT("COMMENTS")=COMMENTS
+9 ;- Free text comments (1-80 characters)
+10 ;CONTACT("CONTACTIEN")=CONTACT IEN
+11 ;- IEN of the main contact entry in the SDEC CONTACT file (#409.86)
+12 ;CONTACT("CONTACTTYPE")=CONTACT TYPE
+13 ;- Contact Type (C - Call, L - Letter, E - Email, T - Text, S - Secure messaging)
+14 ;CONTACT("DFN")=PATIENT DFN
+15 ;- Pointer to the PATIENT file (#2)
+16 ;CONTACT("DTTMENTERED")=DATE/TIME ENTERED (ISO FORMAT)
+17 ;- ISO Date/Time
+18 ;CONTACT("DTTMOFCONTACT")=DATE/TIME OF CONTACT (ISO FORMAT)
+19 ;- ISO Date/Time
+20 ;CONTACT("LEFTMESSAGE")=0 for no, 1 for yes
+21 ;CONTACT("PREFDATE")=PREFERRED DATE (ISO FORMAT)
+22 ;- ISO Date
+23 ;CONTACT("REQTYPE")=REQUEST TYPE
+24 ;- Request Type (A - APPT, R - RECALL, C - CONSULT)
+25 ;CONTACT("REQUESTIEN")=REQUEST IEN
+26 ;- Request IEN (Variable pointer) based on the request type
+27 ; A - SDEC APPT REQUEST (#409.85)
+28 ; C - REQUEST/CONSULTATION file (#123)
+29 ; R - RECALL REQUEST file (#403.5)
+30 ;
ADDUPD(RESULT,CONTACT) ;
+1 NEW ERRORS,DFN,CLINIC,PREFDATE,REQTYPE,DTTMOFCONTACT,CONTACTTYPE,COMMENTS,DTTMENTERED,REQUESTIEN,NEWCONTACT
+2 NEW NEWIEN,SDREQPTR40986,REQTYPE40985,FILERR,FDA,NEWCONTIEN,SUBIENS,CONTACTIEN,SEQUENCE,LEFTMSG,NEWCONTATTMTIEN
+3 SET DFN=$GET(CONTACT("DFN"))
+4 SET CLINIC=$GET(CONTACT("CLINIC"))
+5 SET PREFDATE=""
+6 SET REQTYPE=$GET(CONTACT("REQTYPE"))
+7 SET DTTMOFCONTACT=$GET(CONTACT("DTTMOFCONTACT"))
+8 SET CONTACTTYPE=$GET(CONTACT("CONTACTTYPE"))
+9 SET COMMENTS=$GET(CONTACT("COMMENTS"))
+10 SET DTTMENTERED=$GET(CONTACT("DTTMENTERED"))
+11 SET REQUESTIEN=$GET(CONTACT("REQUESTIEN"))
+12 SET LEFTMSG=$GET(CONTACT("LEFTMESSAGE"))
+13 IF LEFTMSG=""
SET LEFTMSG=0
+14 DO VALIDATEDFN^SDESINPUTVALUTL(.ERRORS,DFN)
+15 IF CLINIC'=""
DO VALIDATECLINIC(.ERRORS,CLINIC)
+16 IF $DATA(ERRORS)
SET ERRORS("Contact",1)=""
DO BUILDJSON^SDESBUILDJSON(.RESULT,.ERRORS)
QUIT
+17 DO VALREQTYPE(.ERRORS,REQTYPE,"^R^A^RTC^C^P^V^")
+18 IF $GET(LEFTMSG)'=""
DO VALLEFTMSG(.ERRORS,LEFTMSG)
+19 SET DTTMOFCONTACT=$$VALDATE2^SDESVALUTIL(.ERRORS,DTTMOFCONTACT,CLINIC,389,390)
+20 ; validate text input based on field definition
+21 DO VALTEXTINPUT(.ERRORS,COMMENTS,409.863,2,1)
+22 SET DTTMENTERED=$$VALDATE2^SDESVALUTIL(.ERRORS,DTTMENTERED,CLINIC,387,388)
+23 IF $DATA(ERRORS)
SET ERRORS("Contact",1)=""
DO BUILDJSON^SDESBUILDJSON(.RESULT,.ERRORS)
QUIT
+24 DO VALREQIEN(.ERRORS,REQUESTIEN,REQTYPE)
+25 DO VALSETOFCODES(.ERRORS,CONTACTTYPE,409.863,1,"Contact Type")
+26 SET CONTACTIEN=$$GETCONTIEN(.ERRORS,REQUESTIEN,REQTYPE)
+27 IF $DATA(ERRORS)
SET ERRORS("Contact",1)=""
DO BUILDJSON^SDESBUILDJSON(.RESULT,.ERRORS)
QUIT
+28 IF REQUESTIEN
Begin DoDot:1
+29 SET SDREQPTR40986=""
+30 IF (REQTYPE="A")!(REQTYPE="RTC")!(REQTYPE="V")
Begin DoDot:2
+31 if $$GET1^DIQ(409.85,REQUESTIEN,.01,"I")'=DFN
QUIT
+32 SET REQTYPE40985=$$GET1^DIQ(409.85,REQUESTIEN,4,"I")
+33 IF REQTYPE40985'="APPT"
IF REQTYPE40985'="RTC"
IF REQTYPE40985'="VETERAN"
QUIT
+34 SET SDREQPTR40986=REQUESTIEN_";"_"SDEC(409.85,"
+35 SET PREFDATE=$$GET1^DIQ(409.85,REQUESTIEN,22,"I")
End DoDot:2
+36 if SDREQPTR40986'=""
QUIT
+37 IF REQTYPE="C"!(REQTYPE="P")
Begin DoDot:2
+38 if $$GET1^DIQ(123,REQUESTIEN,.02,"I")'=DFN
QUIT
+39 if $$GET1^DIQ(123,REQUESTIEN,13,"I")'=REQTYPE
QUIT
+40 if CLINIC'=""&(CLINIC'=$$GET1^DIQ(123,REQUESTIEN,.04,"I"))
QUIT
+41 SET SDREQPTR40986=REQUESTIEN_";"_"GMR(123,"
+42 IF $DATA(^SDEC(409.87,"B",REQUESTIEN))
SET PREFDATE=$$GETPID^SDECCONSJSON(REQUESTIEN)
+43 IF '$DATA(^SDEC(409.87,"B",REQUESTIEN))!(PREFDATE="")
SET PREFDATE=$$GET1^DIQ(123,REQUESTIEN,17,"I")
End DoDot:2
+44 if SDREQPTR40986'=""
QUIT
+45 IF REQTYPE="R"
Begin DoDot:2
+46 if $$GET1^DIQ(403.5,REQUESTIEN,.01,"I")'=DFN
QUIT
+47 IF CLINIC'=""
IF $$GET1^DIQ(403.5,REQUESTIEN,4.5,"I")'=CLINIC
QUIT
+48 SET SDREQPTR40986=REQUESTIEN_";"_"SD(403.5,"
+49 SET PREFDATE=$$GET1^DIQ(403.5,REQUESTIEN,5,"I")
End DoDot:2
End DoDot:1
+50 IF $GET(SDREQPTR40986)=""
Begin DoDot:1
+51 DO ERRLOG^SDESJSON(.ERRORS,394)
+52 SET ERRORS("Contact",1)=""
+53 DO BUILDJSON^SDESBUILDJSON(.RESULT,.ERRORS)
End DoDot:1
QUIT
+54 IF $GET(PREFDATE)=""
Begin DoDot:1
+55 DO ERRLOG^SDESJSON(.ERRORS,408)
End DoDot:1
+56 IF $DATA(ERRORS)
Begin DoDot:1
+57 SET ERRORS("Contact",1)=""
+58 DO BUILDJSON^SDESBUILDJSON(.RESULT,.ERRORS)
End DoDot:1
QUIT
+59 IF 'CONTACTIEN
Begin DoDot:1
+60 DO BLDNEWCONT(.FDA,"+1,",DFN,CLINIC,PREFDATE,REQTYPE,SDREQPTR40986)
+61 SET SUBIENS="+2,+1,"
+62 DO BLDNEWATTMPT(.FDA,SUBIENS,DTTMOFCONTACT,CONTACTTYPE,COMMENTS,DUZ,DTTMENTERED,LEFTMSG,1)
End DoDot:1
+63 ; if there is already a contactien, only build the Date/Time of contact subfile (#409.863) for filing
+64 IF CONTACTIEN
Begin DoDot:1
+65 SET SUBIENS="+1,"_CONTACTIEN_","
+66 SET SEQUENCE=$ORDER(^SDEC(409.86,CONTACTIEN,1,9999),-1)+1
+67 DO BLDNEWATTMPT(.FDA,SUBIENS,DTTMOFCONTACT,CONTACTTYPE,COMMENTS,DUZ,DTTMENTERED,LEFTMSG,SEQUENCE)
End DoDot:1
+68 DO UPDATE^DIE(,"FDA","NEWIEN","FILERR")
KILL FDA
+69 IF $DATA(FILERR)
Begin DoDot:1
+70 DO ERRLOG^SDESJSON(.ERRORS,52,$GET(FILERR("DIERR",1,"TEXT",1)))
+71 SET ERRORS("Contact",1)=""
+72 DO BUILDJSON^SDESBUILDJSON(.RESULT,.ERRORS)
End DoDot:1
QUIT
+73 IF CONTACTIEN
Begin DoDot:1
+74 SET NEWCONTATTMTIEN=$GET(NEWIEN(1))
End DoDot:1
+75 IF 'CONTACTIEN
Begin DoDot:1
+76 SET CONTACTIEN=$GET(NEWIEN(1))
+77 SET NEWCONTATTMTIEN=$GET(NEWIEN(2))
End DoDot:1
+78 ; Update the preferred date/PID date if it is different than the request pid date
+79 IF PREFDATE'=$$GET1^DIQ(409.68,CONTACTIEN,2,"I")
Begin DoDot:1
+80 SET FDA(409.68,CONTACTIEN_",",2)=PREFDATE
DO FILE^DIE(,"FDA")
KILL FDA
End DoDot:1
+81 DO BLDCONTACT(.NEWCONTACT,CONTACTIEN,CLINIC)
+82 IF '$DATA(NEWCONTACT)
SET NEWCONTACT("Contact",1)=""
DO BUILDJSON^SDESBUILDJSON(.RESULT,.CONTACTS)
QUIT
+83 DO DISPMULT(.NEWCONTACT,CONTACTIEN,CLINIC)
+84 DO BUILDJSON^SDESBUILDJSON(.RESULT,.NEWCONTACT)
+85 QUIT
+86 ; return the contact ien based on the full pointer reference
GETCONTIEN(ERRORS,REQIEN,REQTYPE) ;
+1 NEW TRGTFILE,TRGTFLD,FILEROOT,FULLREF,CONTACTDFN,TRGTDFN,CONTACTIEN,TRGTDFNFLD
+2 SET TRGTFILE=$SELECT("^A^RTC^V^"[(U_REQTYPE_U):409.85,"^C^P^"[(U_REQTYPE_U):123,REQTYPE="R":403.5,1:"")
+3 SET TRGTDFNFLD=$SELECT(TRGTFILE=409.85!(TRGTFILE="403.5"):.01,TRGTFILE=123:.02,1:"")
+4 SET FILEROOT=$$ROOT^DILFD(TRGTFILE)
+5 SET FULLREF=REQIEN_";"_$PIECE(FILEROOT,U,2)
+6 IF '$LENGTH(FULLREF)
Begin DoDot:1
+7 DO ERRLOG^SDESJSON(.ERRORS,391)
End DoDot:1
QUIT ""
+8 ; If this entry doesn't exist, return "", because it is a NEW entry
+9 IF '$DATA(^SDEC(409.86,"REQPTR",FULLREF))
QUIT ""
+10 SET CONTACTIEN=$ORDER(^SDEC(409.86,"REQPTR",FULLREF,"A"),-1)
+11 IF 'CONTACTIEN
Begin DoDot:1
+12 DO ERRLOG^SDESJSON(.ERRORS,392)
End DoDot:1
QUIT ""
+13 SET CONTACTDFN=$$GET1^DIQ(409.86,CONTACTIEN,.01,"I")
+14 SET TRGTDFN=$$GET1^DIQ(TRGTFILE,REQIEN,TRGTDFNFLD,"I")
+15 ; check for DFN match
+16 IF CONTACTDFN'=TRGTDFN
Begin DoDot:1
+17 DO ERRLOG^SDESJSON(.ERRORS,393)
End DoDot:1
QUIT ""
+18 QUIT CONTACTIEN
+19 ; add a new entry SDEC CONTACTS file (#409.86)
BLDNEWCONT(FDA,IENS,DFN,CLINIC,PREFDATE,REQTYPE,SDREQPTR40986) ;=
+1 SET FDA(409.86,IENS,.01)=DFN
+2 SET FDA(409.86,IENS,1)=CLINIC
+3 SET FDA(409.86,IENS,2)=PREFDATE
+4 SET FDA(409.86,IENS,2.1)=REQTYPE
+5 ; Main Sequence (2.2) is always set to 1 initially
+6 SET FDA(409.86,IENS,2.2)=1
+7 SET FDA(409.86,IENS,2.3)=SDREQPTR40986
+8 QUIT
+9 ; add a new entry to the Date/time of contact multiple in the SDEC CONTACTS file (#409.86)
BLDNEWATTMPT(FDA,IENS,DTTMOFCONTACT,CONTACTTYPE,COMMENTS,DUZ,DTTMENTERED,LEFTMSG,SEQUENCE) ;
+1 SET FDA(409.863,IENS,.01)=DTTMOFCONTACT
+2 SET FDA(409.863,IENS,1)=CONTACTTYPE
+3 SET FDA(409.863,IENS,2)=COMMENTS
+4 SET FDA(409.863,IENS,3)=$GET(LEFTMSG)
+5 ; The first entry in this subfile will always be 1
+6 SET FDA(409.863,IENS,4)=SEQUENCE
+7 SET FDA(409.863,IENS,5)=$GET(DUZ)
+8 SET FDA(409.863,IENS,6)=DTTMENTERED
+9 QUIT
+10 ;
+11 ; SDES CONTACT DISPLAY SINGLE
DISPLAY(RESULT,REQTYPE,REQIEN) ;
+1 NEW ERRORS,CONTACTIEN,RECALLP01,APPTREQP01,CONTACTP01,CONSULTP02,VPTR,CONTACTS
+2 SET REQTYPE=$GET(REQTYPE)
SET REQIEN=$GET(REQIEN)
+3 DO VALREQTYPE(.ERRORS,REQTYPE,"^R^A^RTC^C^P^V^")
+4 IF $DATA(ERRORS)
SET ERRORS("Contact",1)=""
DO BUILDJSON^SDESBUILDJSON(.RESULT,.ERRORS)
QUIT
+5 DO VALREQIEN(.ERRORS,REQIEN,REQTYPE)
+6 IF $DATA(ERRORS)
SET ERRORS("Contact",1)=""
DO BUILDJSON^SDESBUILDJSON(.RESULT,.ERRORS)
QUIT
+7 SET CONTACTIEN=$$GETCONTIEN(.ERRORS,REQIEN,REQTYPE)
+8 IF 'CONTACTIEN
SET ERRORS("Contact",1)=""
DO BUILDJSON^SDESBUILDJSON(.RESULT,.ERRORS)
QUIT
+9 SET VPTR=$$GET1^DIQ(409.86,CONTACTIEN,2.3,"I")
+10 IF $PIECE(VPTR,";")'=REQIEN
Begin DoDot:1
+11 SET ERRORS("Contact",1)=""
+12 DO ERRLOG^SDESJSON(.ERRORS,394)
+13 DO BUILDJSON^SDESBUILDJSON(.RESULT,.ERRORS)
End DoDot:1
QUIT
+14 DO BLDCONTACT(.CONTACTS,CONTACTIEN)
+15 IF $DATA(ERRORS)
SET ERRORS("Contact",1)=""
DO BUILDJSON^SDESBUILDJSON(.RESULT,.ERRORS)
QUIT
+16 IF '$DATA(CONTACTS)
SET CONTACTS("Contact",1)=""
DO BUILDJSON^SDESBUILDJSON(.RESULT,.CONTACTS)
QUIT
+17 DO DISPMULT(.CONTACTS,CONTACTIEN)
+18 DO BUILDJSON^SDESBUILDJSON(.RESULT,.CONTACTS)
+19 QUIT
DISPMULT(RESULT,CONTACTIEN,CLINIC) ;
+1 ; RPC: SDES CONTACT MULTI-DISPLAY
+2 NEW ERRORS,CONTMULT,CIENS,CONTDATA,CCNT,CONTACTS,CONTDATE,DTTMENTERED
+3 SET CONTACTIEN=$GET(CONTACTIEN)
+4 SET CCNT=0
+5 SET CONTMULT=0
FOR
SET CONTMULT=$ORDER(^SDEC(409.86,CONTACTIEN,1,CONTMULT))
if 'CONTMULT
QUIT
Begin DoDot:1
+6 SET CIENS=CONTMULT_","_CONTACTIEN_","
+7 DO GETS^DIQ(409.863,CIENS,"**","IE","CONTDATA","CERR")
+8 IF $DATA(CERR)
KILL CERR
QUIT
+9 IF '$GET(CLINIC)
SET CLINIC=$$GET1^DIQ(409.86,CONTACTIEN,1,"I")
+10 SET CCNT=CCNT+1
+11 SET CONTDATE=$GET(CONTDATA(409.863,CIENS,.01,"I"))
+12 SET CONTDATE=$$FMTISO^SDAMUTDT(CONTDATE,$GET(CLINIC))
+13 SET CONTACTS("ContactAttempts",CCNT,"DateTimeOfContact")=CONTDATE
+14 SET CONTACTS("ContactAttempts",CCNT,"Type")=$GET(CONTDATA(409.863,CIENS,1,"E"))
+15 SET CONTACTS("ContactAttempts",CCNT,"Comments")=$GET(CONTDATA(409.863,CIENS,2,"E"))
+16 SET CONTACTS("ContactAttempts",CCNT,"LeftMessage")=$GET(CONTDATA(409.863,CIENS,3,"E"))
+17 SET CONTACTS("ContactAttempts",CCNT,"Sequence")=$GET(CONTDATA(409.863,CIENS,4,"E"))
+18 SET CONTACTS("ContactAttempts",CCNT,"EnteredByName")=$GET(CONTDATA(409.863,CIENS,5,"E"))
+19 SET CONTACTS("ContactAttempts",CCNT,"EnteredByIEN")=$GET(CONTDATA(409.863,CIENS,5,"I"))
+20 SET CONTACTS("ContactAttempts",CCNT,"EnteredBySecID")=$$GET1^DIQ(200,$GET(CONTDATA(409.863,CIENS,5,"I")),205.1,"E")
+21 SET DTTMENTERED=$$FMTISO^SDAMUTDT($GET(CONTDATA(409.863,CIENS,6,"I")),$GET(CLINIC))
+22 SET CONTACTS("ContactAttempts",CCNT,"DateTimeEntered")=DTTMENTERED
+23 KILL CONTDATA
End DoDot:1
+24 IF '$DATA(CONTACTS)
SET CONTACTS("ContactAttempts",1)=""
+25 MERGE RESULT=CONTACTS
+26 QUIT
BLDCONTACT(RESULT,IEN,CLINIC) ;
+1 NEW F,IENS,ERR,PREFDATE,STOPIEN
+2 SET F=409.86
SET IENS=IEN_","
+3 DO GETS^DIQ(409.86,IENS,"**","IE","CONTDATA","ERR")
+4 if $DATA(ERR)
QUIT
+5 IF '$GET(CLINIC)
SET CLINIC=$GET(CONTDATA(F,IENS,1,"I"))
+6 SET PREFDATE=$$FMTISO^SDAMUTDT($GET(CONTDATA(F,IENS,2,"I")),$GET(CLINIC))
+7 IF PREFDATE<0
SET PREFDATE=""
+8 SET RESULT("Contact","ID")=$PIECE(IENS,",")
+9 SET RESULT("Contact","Patient")=$GET(CONTDATA(F,IENS,.01,"I"))
+10 SET RESULT("Contact","Clinic")=$GET(CONTDATA(F,IENS,1,"I"))
+11 SET STOPIEN=$$GET1^DIQ(44,CLINIC,8,"I")
+12 SET RESULT("Contact","ClinicStopCodeAMIS")=$$STOPCODETOAMIS^SDESUTIL(STOPIEN)
+13 SET RESULT("Contact","PreferredDate")=PREFDATE
+14 SET RESULT("Contact","RequestType")=$GET(CONTDATA(F,IENS,2.1,"I"))
+15 SET RESULT("Contact","MainSequence")=$GET(CONTDATA(F,IENS,2.2,"I"))
+16 NEW SRVSTRING
+17 SET SRVSTRING=$$GETSRV^SDES2CONTACTS($GET(CONTDATA(F,IENS,2.1,"I")),+$GET(CONTDATA(F,IENS,2.3,"I")))
+18 SET RESULT("Contact","Service")=$PIECE($GET(SRVSTRING),"^")
+19 SET RESULT("Contact","ServiceName")=$PIECE($GET(SRVSTRING),"^",2)
+20 SET RESULT("Contact","RequestPointer")=$GET(CONTDATA(F,IENS,2.3,"I"))
+21 KILL CONTDATA
+22 QUIT
+23 ; RECALLREQPTR is needed to find the old CONTACT entry tied to a RECALL REMINDER and re-point it to the new entry
+24 ; NEWREQLINK is ONLY passed in if this was a recall request that is being reopened as an appointment request
+25 ; REQIEN is the 409.85 request ien for CONSULTS and APPT type records
UPDCONTSEQ(DFN,REQIEN,NEWREQLINK,RECALLREQPTR) ; update contact attempts main sequence
+1 NEW IEN40986,REC409860,FOUND,SDECFDA,REC40986PTR
+2 SET IEN40986=""
SET FOUND=0
+3 FOR
SET IEN40986=$ORDER(^SDEC(409.86,"B",DFN,IEN40986))
if IEN40986=""!(FOUND)
QUIT
Begin DoDot:1
+4 SET REC40986PTR=$PIECE($$GET1^DIQ(409.86,IEN40986,2.3,"I"),";")
+5 IF $GET(RECALLREQPTR)
IF $GET(RECALLREQPTR)'=+REC40986PTR
QUIT
+6 IF '$GET(RECALLREQPTR)
IF REQIEN'=REC40986PTR
QUIT
+7 KILL SDECFDA
+8 SET SDECFDA(409.86,IEN40986_",",2.2)=$ORDER(^SDEC(409.86,IEN40986,1,9999),-1)+1
+9 IF $GET(NEWREQLINK)]""
Begin DoDot:2
+10 SET SDECFDA(409.86,IEN40986_",",2.1)="A"
+11 SET SDECFDA(409.86,IEN40986_",",2.3)=NEWREQLINK
End DoDot:2
+12 DO FILE^DIE("","SDECFDA")
KILL SDECFDA
+13 SET FOUND=1
End DoDot:1
+14 QUIT
+15 ; validate clinic
VALIDATECLINIC(ERRORS,CLINICIEN) ;
+1 IF '$DATA(^SC(CLINICIEN,0))
DO ERRLOG^SDESJSON(.ERRORS,19)
QUIT
+2 QUIT
+3 ; validate contact request type
VALREQTYPE(ERRORS,REQTYPE,RESTRICT2LIST) ;
+1 NEW RESULTS,CONT,CODE,INTCODE,FOUND
+2 IF REQTYPE=""
DO ERRLOG^SDESJSON(.ERRORS,395)
+3 DO FIELD^DID(409.86,2.1,"","SET OF CODES","RESULTS")
+4 SET FOUND=0
+5 FOR CONT=1:1:$LENGTH(RESULTS("SET OF CODES"),";")
Begin DoDot:1
+6 SET CODE=$PIECE(RESULTS("SET OF CODES"),";",CONT)
if '$LENGTH(CODE)
QUIT
+7 SET INTCODE=$PIECE(CODE,":")
+8 IF $GET(RESTRICT2LIST)]""
IF RESTRICT2LIST'[(U_INTCODE_U)
QUIT
+9 IF REQTYPE=INTCODE
SET FOUND=1
QUIT
End DoDot:1
if FOUND
QUIT
+10 IF 'FOUND
DO ERRLOG^SDESJSON(.ERRORS,396)
+11 QUIT
+12 ; validate request ien
VALREQIEN(ERRORS,REQIEN,REQTYPE) ;
+1 IF REQIEN=""
DO ERRLOG^SDESJSON(.ERRORS,3)
QUIT
+2 IF (REQTYPE="A")!(REQTYPE="RTC")!(REQTYPE="V")
IF '$DATA(^SDEC(409.85,REQIEN))
DO ERRLOG^SDESJSON(.ERRORS,4)
QUIT
+3 IF (REQTYPE="C")!(REQTYPE="P")
IF '$DATA(^GMR(123,REQIEN))
DO ERRLOG^SDESJSON(.ERRORS,4)
QUIT
+4 IF REQTYPE="R"
IF '$DATA(^SD(403.5,REQIEN))
DO ERRLOG^SDESJSON(.ERRORS,4)
QUIT
+5 QUIT
+6 ; validate contact ien
VALIDATECONTIEN(ERRORS,CONTACTIEN) ;
+1 IF CONTACTIEN=""
DO ERRLOG^SDESJSON(.ERRORS,398)
QUIT
+2 IF '$DATA(^SDEC(409.86,CONTACTIEN))
DO ERRLOG^SDESJSON(.ERRORS,399)
QUIT
+3 QUIT
VALCONTTYPE(ERRORS,TYPE) ;
+1 NEW RESULTS,CONT,CODE,INTCODE,FOUND,CODEINC,CODESET,FULLCODE
+2 IF TYPE=""
DO ERRLOG^SDESJSON(.ERRORS,400)
+3 DO FIELD^DID(409.863,1,"","SET OF CODES","RESULTS")
+4 SET CODESET=$GET(RESULTS("SET OF CODES"))
+5 SET FOUND=0
+6 FOR CODEINC=1:1:$LENGTH(CODESET,";")
Begin DoDot:1
+7 SET FULLCODE=$PIECE(CODESET,";",CODEINC)
+8 SET INTCODE=$PIECE(FULLCODE,":")
+9 if INTCODE'=TYPE
QUIT
+10 SET FOUND=1
End DoDot:1
if FOUND
QUIT
+11 IF 'FOUND
DO ERRLOG^SDESJSON(.ERRORS,401)
+12 QUIT
+13 ; FILE - file where the set of codes field lives
+14 ; FLD - set of codes field
+15 ; VALUE - value to validate
+16 ; TEXT - meaningful sentence predicate to return. This will be proceeded by 'Missing set of codes value' or "Invalid set of codes value"
+17 ; - (i.e, contact attempt type, appointment type)
VALSETOFCODES(ERRORS,VALUE,FILE,FLD,TEXT) ;
+1 NEW RESULTS,CONT,CODE,INTCODE,FOUND,RESULTS,ITEM
+2 IF VALUE=""
DO ERRLOG^SDESJSON(.ERRORS,52,"Missing set of codes value: "_TEXT_".")
QUIT
+3 DO FIELD^DID(FILE,FLD,"","SET OF CODES","RESULTS")
+4 SET FOUND=0
+5 FOR ITEM=1:1:$LENGTH(RESULTS("SET OF CODES"),";")
Begin DoDot:1
+6 SET CODE=$PIECE(RESULTS("SET OF CODES"),";",ITEM)
if '$LENGTH(CODE)
QUIT
+7 SET INTCODE=$PIECE(CODE,":")
+8 IF VALUE=INTCODE
SET FOUND=1
QUIT
End DoDot:1
if FOUND
QUIT
+9 IF 'FOUND
DO ERRLOG^SDESJSON(.ERRORS,52,"Invalid set of codes value: "_TEXT_": '"_VALUE_"'.")
+10 QUIT
VALTEXTINPUT(ERRORS,COMMENTS,FILE,FLD,REQUIRED) ;
+1 NEW X,INPUTCHK,RESULTS,LABEL,HELPTEXT
+2 DO FIELD^DID(FILE,FLD,"","INPUT TRANSFORM;HELP-PROMPT;LABEL","RESULTS")
+3 SET INPUTCHK=$GET(RESULTS("INPUT TRANSFORM"))
+4 SET HELPTEXT=$GET(RESULTS("HELP-PROMPT"))
+5 SET LABEL=$GET(RESULTS("LABEL"))
+6 IF $GET(REQUIRED)
IF '$LENGTH($GET(COMMENTS))
DO ERRLOG^SDESJSON(.ERRORS,52,"Missing field: "_$SELECT($LENGTH($GET(LABEL)):LABEL_".",1:"Unknown Text Field."))
QUIT
+7 SET X=COMMENTS
+8 XECUTE INPUTCHK
+9 IF '$DATA(X)
DO ERRLOG^SDESJSON(.ERRORS,52,HELPTEXT)
+10 QUIT
VALCONTACTIEN(ERRORS,IEN) ;
+1 IF 'IEN
DO ERRLOG^SDESJSON(.ERRORS,398)
QUIT
+2 IF '$DATA(^SDEC(409.86,IEN))
DO ERRLOG^SDESJSON(.ERRORS,399)
+3 QUIT
VALLEFTMSG(ERRORS,LEFTMSG) ;
+1 IF LEFTMSG'=0
IF LEFTMSG'=1
DO ERRLOG^SDESJSON(.ERRORS,402)
+2 QUIT