SDECWL2 ;ALB/SAT,WTC,LAB - VISTA SCHEDULING RPCS ;Apr 10, 2020@15:22
;;5.3;Scheduling;**627,642,658,665,694,745**;Aug 13, 1993;Build 40
;;Per VHA Directive 2004-038, this routine should not be modified
;
Q
;
WLSET(RET,INP) ;Waitlist Set
;SD*5.3*745 replace external 'INP...' due to XINDEX issue. Parameters are then rolled into the INP array
;WLSET(RET,S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14,S15,S16,S17,S18,S19,S20,S21,S22,S23,S24,S25,S26,SD27) external parameter tag in SDEC
; INP - Input parameters array
; INP(1) = (integer) Wait List IEN point to
; SD WAIT LIST file 409.3.
; If null, a new entry will be added
; INP(2) = (text) DFN Pointer to the PATIENT file 2
; INP(3) = (date) Originating Date/time in external date form
; INP(4) = (text) Institution name NAME field from the INSTITUTION file
; INP(5) = (text) Wait List Type
; PCMM TEAM ASSIGNMENT
; PCMM POSITION ASSIGNMENT
; SERVICE/SPECIALITY
; SPECIFIC CLINIC
; INP(6) = (text) WL Specific Team name - NAME field in the TEAM file 404.51
; INP(7) = (text) WL Specific Position name - NAME field in the
; TEAM POSITION file 404.57.
; INP(8) = (text) WL Service/Specialty name - NAME field in
; SD WL SERVICE/SPECIALTY file 409.31 OR ien from 409.31
; INP(9) = (text) WL Specific Clinic name - NAME field in
; SD WL CLINIC LOCATION file 409.32.
; INP(10) = (text) Originating User name - NAME field in NEW PERSON file 200
; INP(11) = (text) Priority - 'ASAP' or 'FUTURE'
; INP(12) = (text) Request By - 'PROVIDER' or 'PATIENT'
; INP(13) = (text) Provider name - NAME field in NEW PERSON file 200
; INP(14) = (date) Desired Date of appointment in external format.
; INP(15) = (text) comment must be 1-60 characters
; INP(16) = (text) EWL Enrollee Status
; NEW
; ESTABLISHED
; PRIOR
; UNDETERMINED
; INP(17) = (text) NOT USED - PATIENT TELEPHONE 4-20 characters
; INP(18) = (text) ENROLLMENT PRIORITY - Valid Values are:
; GROUP 1
; GROUP 2
; GROUP 3
; GROUP 4
; GROUP 5
; GROUP 6
; GROUP 7
; GROUP 8
; INP(19) = (text) NOT USED - APPT SCHEDULED DATE
; INP(20) = (text) <NOT USED> MULTIPLE APPOINTMENT RTC NO; YES
; INP(21) = (integer) <NOT USED> MULT APPT RTC INTERVAL integer between 1-365
; INP(22) = (integer) <NOT USED> MULT APPT NUMBER integer between 1-100
; INP(23) = Patient Contacts separated by ::
; Each :: piece has the following ~~ pieces:
; 1) = (date) DATE ENTERED external date/time
; 2) = (text) PC ENTERED BY USER ID or NAME - Pointer to NEW PERSON file or NAME
; 4) = (text) ACTION - 'CALLED', 'MESSAGE LEFT', or 'LETTER'
; 5) = (optional) PATIENT PHONE Free-Text 4-20 characters
; 6) = NOT USED (optional) Comment 1-160 characters
; INP(24) = (optional) SERVICE CONNECTED PRIORITY valid values are NO YES
; INP(25) = (optional) SERVICE CONNECTED PERCENTAGE = numeric 0-100
; INP(27) = (optional) Appointment Type ID pointer to APPOINTMENT TYPE file 409.1
;
N X,Y,%DT
N DFN,MI,WLIEN,WLORIGDT,WLINST,WLINSTI,WLTYPE,WLTEAM,WLPOS,WLSRVSP,WLCLIN
N WLUSER,WLPRIO,WLREQBY,WLPROV,WLDAPTDT,WLCOMM,WLEESTAT,WLEDT,WLQUIT
N AUDF,FNUM,FDA,WLNEW,WLRET,WLMSG,WLDATA,WLERR,WLHOS
N WLAPTYP,WLPATTEL,WLENPRI,WLSVCCON,WLSVCCOP
S (AUDF,WLQUIT)=0
S FNUM=$$FNUM^SDECWL
S RET="I00020ERRORID^T00030ERRORTEXT"_$C(30)
; Use MERGE instead of SET so we can know if values were actually specified or not.
; This way, if a value is null, we will delete any previous value,
; but if it is missing, then we will just ignore it.
M WLIEN=INP(1)
S WLHOS=""
S DFN=$G(INP(2))
I '+DFN S RET=RET_"-1^Invalid Patient ID."_$C(30,31) Q
I '$D(^DPT(DFN,0)) S RET=RET_"-1^Invalid Patient ID"_$C(30,31) Q
S WLEDT=$P($G(INP(3)),":",1,2)
;
; Change date/time conversion so midnight is handled properly. wtc 694 5/17/18
;
S WLEDT=$$NETTOFM^SDECDATE(WLEDT,"Y","N") I WLEDT=-1 S RET=RET_"-1^Invalid Origination date."_$C(30,31) Q ;
;S %DT="TX" S X=WLEDT D ^%DT S WLEDT=Y
;I Y=-1 S RET=RET_"-1^Invalid Origination date."_$C(30,31) Q
S WLORIGDT=$P(WLEDT,".",1)
S WLINST=$G(INP(4)) I WLINST'="" D
.I '+WLINST S WLINST=$O(^DIC(4,"B",WLINST,0))
S WLTYPE=$G(INP(5)) I WLTYPE'="" S WLTYPE=$S(WLTYPE="PCMM TEAM ASSIGNMENT":1,WLTYPE="PCMM POSSITION ASSIGNMENT":2,WLTYPE="SERVICE/SPECIALITY":3,WLTYPE="SPECIFIC CLINIC":4,+WLTYPE:+WLTYPE,1:"")
I WLTYPE="" S RET=RET_"-1^Invalid Wait List Type."_$c(30,31) Q
S WLTEAM=$G(INP(6)) I WLTEAM'="" D
.I '+WLTEAM S WLTEAM=$O(^SCTM(404.51,"B",WLTEAM,0))
.I +WLTEAM I '$D(^SCTM(404.51,+WLTEAM,0)) S WLTEAM=""
S WLPOS=$G(INP(7)) I WLPOS'="" D
.I '+WLPOS S WLPOS=$O(^DIC(404.57,"B",WLPOS,0))
.I +WLPOS I '$D(^SCTM(404.57,WLPOS,0)) S WLPOS=""
S WLCLIN=$G(INP(9))
I WLCLIN'="" D ;WLCLIN pointer to SD WL CLINIC LOCATION; WLHOS pointer to HOSPITAL LOCATION
.I +WLCLIN D
..I '$D(^SDWL(409.32,+WLCLIN,0)) S RET=RET_"-1^"_WLCLIN_" is an invalid WL Waitlist Specific Clinic ID."_$C(30,31) S WLQUIT=1 Q
..S WLHOS=+$P($G(^SDWL(409.32,+WLCLIN,0)),U,1)
.I '+WLCLIN D
..S WLHOS=$O(^SC("B",WLCLIN,0)) ;$S(+WLCLIN:$P($G(^SC($P($G(^SDWL(409.32,WLCLIN,0)),U,1),0)),U,1),1:WLCLIN)
..S WLCLIN=$O(^SDWL(409.32,"B",+WLHOS,0)) I 'WLCLIN S RET=RET_"-1^"_WLCLIN_" is an invalid WL Waitlist Specific Clinic Name."_$C(30,31) S WLQUIT=1 Q
Q:+WLQUIT ;alb/sat 665
S INP(8)=$G(INP(8))
I INP(8)'="",WLCLIN'="" S RET=RET_"-1^Cannot include both Clinic and Service."_$C(30,31) Q ;alb/sat 642
I +INP(8),'$D(^SDWL(409.31,+INP(8),0)) S RET=RET_"-1^Invalid service/specialty "_+INP(8)_"."_$C(30,31) Q ;alb/sat 642
S WLUSER=$G(INP(10))
I WLUSER'="" I '+WLUSER S WLUSER=$O(^VA(200,"B",WLUSER,0))
I WLUSER="" S WLUSER=DUZ
S WLREQBY=$G(INP(12)) I WLREQBY'="" S WLREQBY=$S(WLREQBY="PATIENT":2,WLREQBY="PROVIDER":1,1:"")
S WLPROV=$G(INP(13)) I WLPROV'="" I '+WLPROV S WLPROV=$O(^VA(200,"B",WLPROV,0))
S WLDAPTDT=$G(INP(14))
S %DT="" S X=$P($G(WLDAPTDT),"@",1) D ^%DT S WLPRIO=$S(Y=$P($$NOW^XLFDT,".",1):"A",1:"F")
S WLDAPTDT=Y
I Y=-1 S WLDAPTDT="" ;S RET=RET_"-1^Invalid Desired Date."_$C(30,31) Q
S (INP(15),WLCOMM)=$TR($G(INP(15)),"^"," ") ;alb/sat 658
S WLEESTAT=$G(INP(16)) I WLEESTAT'="" S WLEESTAT=$S(WLEESTAT="NEW":"N",WLEESTAT="ESTABLISHED":"E",WLEESTAT="PRIOR":"P",WLEESTAT="UNDETERMINED":"U",1:WLEESTAT)
M WLPATTEL=INP(17)
S WLENPRI=$G(INP(18)) D
.S:WLENPRI'="" WLENPRI=$S(WLENPRI="GROUP 1":1,WLENPRI="GROUP 2":2,WLENPRI="GROUP 3":3,WLENPRI="GROUP 4":4,WLENPRI="GROUP 5":5,WLENPRI="GROUP 6":6,WLENPRI="GROUP 7":7,WLENPRI="GROUP 8":8,1:WLENPRI)
S WLSVCCON=$G(INP(24)) S:WLSVCCON'="" WLSVCCON=$S(WLSVCCON="YES":1,1:0)
S WLSVCCOP=$G(INP(25)) I WLSVCCOP'="" S WLSVCCOP=+$G(WLSVCCOP) S:(+WLSVCCOP<0)!(+WLSVCCOP>100) WLSVCCOP=""
S WLAPTYP=+$G(INP(27)) I +WLAPTYP,'$D(^SD(409.1,WLAPTYP,0)) S WLAPTYP=""
S WLIEN=$G(WLIEN)
S WLNEW=WLIEN=""
I WLNEW D
. S FDA=$NA(FDA(FNUM,"+1,"))
. S @FDA@(.01)=+DFN
. ;This handles the date/time coming in as "8/27/2014 12:00:00 AM"
. S:$G(WLORIGDT)'="" @FDA@(1)=WLORIGDT
. S:$G(WLINST)'="" @FDA@(2)=+WLINST
. S:$G(WLTYPE)'="" @FDA@(4)=WLTYPE
. ;S:$G(WLTEAM)'="" @FDA@(5)=+WLTEAM
. S:$G(WLPOS)'="" @FDA@(6)=+WLPOS
. ;S:$G(WLSRVSP)'="" @FDA@(7)=$S(+WLSRVSP:$P($G(^SDWL(409.31,WLSRVSP,0)),U),1:WLSRVSP)
. S:$G(WLCLIN)'="" @FDA@(8)=+WLCLIN
. S:$G(WLHOS)'="" @FDA@(8.5)=WLHOS
. S:+WLAPTYP @FDA@(8.7)=+WLAPTYP
. S:$G(WLUSER)'="" @FDA@(9)=+WLUSER
. S:$G(WLEDT)'="" @FDA@(9.5)=WLEDT
. S:$G(WLPRIO)'="" @FDA@(10)=WLPRIO
. S:$G(WLENPRI)'="" @FDA@(10.5)=WLENPRI
. S:$G(WLREQBY)'="" @FDA@(11)=WLREQBY
. S:$G(WLPROV)'="" @FDA@(12)=+WLPROV
. S:$G(WLSVCCOP)'="" @FDA@(14)=WLSVCCOP
. S:$G(WLSVCCON)'="" @FDA@(15)=WLSVCCON
. S:$G(WLDAPTDT)'="" @FDA@(22)=WLDAPTDT
. S @FDA@(23)="O"
. S:$G(WLCOMM)'="" @FDA@(25)=WLCOMM
. S:$G(WLEESTAT)'="" @FDA@(27)=WLEESTAT
. S:+WLAPTYP @FDA@(8.7)=+WLAPTYP
E D
. S WLIEN=WLIEN_"," ; Append the comma for both
. K WLDATA,WLERR
. D GETS^DIQ(FNUM,WLIEN,"*","IE","WLDATA","WLERR")
. I $D(WLERR) M WLMSG=WLERR K FDA Q
. S FDA=$NA(FDA(FNUM,WLIEN))
. I $D(WLORIGDT) D
. . I WLORIGDT'=WLDATA(FNUM,WLIEN,1,"I") S @FDA@(1)=WLORIGDT
. I $D(WLINST),WLINST'=WLDATA(FNUM,WLIEN,2,"I") S @FDA@(2)=$S(WLINST="":"@",1:+WLINST)
. I $D(WLTYPE),WLTYPE'=WLDATA(FNUM,WLIEN,4,"E") S @FDA@(4)=WLTYPE
. ;I $D(WLTEAM),WLTEAM'=WLDATA(FNUM,WLIEN,5,"I") S @FDA@(5)=$S(WLTEAM="":"@",1:+WLTEAM)
. I $D(WLPOS),WLPOS'=WLDATA(FNUM,WLIEN,6,"I") S @FDA@(6)=$S(WLPOS="":"@",1:+WLPOS)
. ;I $D(WLSRVSP),WLSRVSP'=WLDATA(FNUM,WLIEN,7,"I") S @FDA@(7)=$S(WLSRVSP="":"@",+WLSRVSP:$P($G(^DIC(40.7,$P($G(^SDWL(409.31,WLSRVSP,0)),U),0)),U),1:WLSRVSP)
. I $D(WLCLIN),WLCLIN'=WLDATA(FNUM,WLIEN,8,"I") S @FDA@(8)=$S(WLCLIN="":"@",1:+WLCLIN),AUDF=1 S:WLDATA(FNUM,WLIEN,7,"I")'="" @FDA@(7)="@"
. I $D(WLHOS),WLHOS'=WLDATA(FNUM,WLIEN,8.5,"I") S @FDA@(8.5)=WLHOS,AUDF=1 S:WLDATA(FNUM,WLIEN,7,"I")'="" @FDA@(7)="@"
. S:+WLAPTYP @FDA@(8.7)=+WLAPTYP
. I $D(WLUSER),WLUSER'=WLDATA(FNUM,WLIEN,9,"I") S @FDA@(9)=$S(WLUSER="":"@",1:+WLUSER)
. I $D(WLEDT),WLEDT'=$G(WLDATA(FNUM,WLIEN,9.5,"I")) S @FDA@(9.5)=WLEDT
. I $D(WLPRIO),WLPRIO'=WLDATA(FNUM,WLIEN,10,"I") S @FDA@(10)=$S(WLPRIO="":"@",1:WLPRIO)
. I $D(WLENPRI),WLENPRI'=WLDATA(FNUM,WLIEN,10.5,"E") S @FDA@(10.5)=WLENPRI
. I $D(WLREQBY),WLREQBY'=WLDATA(FNUM,WLIEN,11,"I") S @FDA@(11)=$S(WLREQBY="":"@",1:WLREQBY)
. I $D(WLPROV),WLPROV'=WLDATA(FNUM,WLIEN,12,"I") S @FDA@(12)=$S(WLPROV="":"@",1:+WLPROV)
. I $D(WLSVCCOP),WLSVCCOP'=$G(WLDATA(FNUM,WLIEN,14,"I")) S @FDA@(14)=WLSVCCOP
. I $D(WLSVCCON),WLSVCCON'=WLDATA(FNUM,WLIEN,15,"E") S @FDA@(15)=WLSVCCON
. I $D(WLDAPTDT),WLDAPTDT'=WLDATA(FNUM,WLIEN,22,"I") S @FDA@(22)=$S(WLDAPTDT="":"@",1:WLDAPTDT)
. I $D(WLCOMM),WLCOMM'=WLDATA(FNUM,WLIEN,25,"I") S @FDA@(25)=$S(WLCOMM="":"@",1:WLCOMM)
. I $D(WLEESTAT),WLEESTAT'=WLDATA(FNUM,WLIEN,27,"I") S @FDA@(27)=$S(WLEESTAT="":"@",1:WLEESTAT)
; Only call UPDATE^DIE if there are any array entries in FDA
D:$D(@FDA) UPDATE^DIE("","FDA","WLRET","WLMSG")
I $D(WLMSG) D
. F MI=1:1:$G(WLMSG("DIERR")) S RET=RET_"-1^"_$G(WLMSG("DIERR",MI,"TEXT",1))_$C(30)
. S RET=RET_$C(31)
Q:$D(WLMSG)
S WLINSTI=$P($G(^SDWL(409.3,$S(+WLIEN:WLIEN,1:WLRET(1)),0)),U,3)
I $G(INP(6))'="" D WL6 ;wl specific team
I $G(INP(8))'="" D WL8 ;wl service specialty
I $D(INP(23)) D WL23(INP(23),$S(+WLIEN:WLIEN,1:WLRET(1))) ;patient contacts
I +AUDF D WLAUD($S(+WLIEN:+WLIEN,1:WLRET(1)),WLCLIN,WLHOS,INP(8)) ;VS AUDIT
I +$G(WLRET(1)) S RET=RET_WLRET(1)_U_$C(30,31)
E S RET=RET_+WLIEN_U_$C(30,31)
Q
;
WL6 ;WL SPECIFIC TEAM does not store with bulk UPDATE^DIE with external data; don't know why
N FDA,H
S H=$O(^SCTM(404.51,"B",+$G(INP(6)),0))
I +H K FDA S FDA=$NA(FDA(409.3,$S(+WLIEN:WLIEN,1:WLRET(1))_",")) S @FDA@(5)=H D UPDATE^DIE("","FDA")
Q
;
WL8 ;WL SERVICE/SPECIALTY does not store with bulk UPDATE^DIE if duplicates; need to look for 1st active one
; WL Service/Specialty name - NAME field in
; SD WL SERVICE/SPECIALTY file 409.31.
N ADUF,SDWLNOD,WLSRVSP
S WLSRVSP=""
I +INP(8) S WLSRVSP=INP(8)
I WLSRVSP="" S H="" F S H=$O(^DIC(40.7,"B",$G(INP(8)),H)) Q:H="" D Q:WLSRVSP'=""
.I $P(^DIC(40.7,H,0),U,3)'="",$P(^DIC(40.7,H,0),U,3)<$$NOW^XLFDT() Q
.S WLSRVSP=$O(^SDWL(409.31,"B",H,0))
I WLSRVSP'="" D
.K FDA
.S FDA=$NA(FDA(409.3,$S(+WLIEN:WLIEN,1:WLRET(1))_","))
.S @FDA@(7)=WLSRVSP,ADUF=1
.I +WLIEN,$D(WLDATA) D
..S:WLDATA(FNUM,WLIEN,8,"I")'="" @FDA@(8)="@" ;errors
..S:WLDATA(FNUM,WLIEN,8.5,"I")'="" @FDA@(8.5)="@" ;errors
.D:$D(FDA) UPDATE^DIE("","FDA")
Q
;
WLACT(NAME) ;
N ACTIVE,H
S ACTIVE=""
S H="" F S H=$O(^DIC(40.7,"B",NAME,H)) Q:H="" D Q:ACTIVE'=""
.I $P(^DIC(40.7,H,0),U,3)'="",$P(^DIC(40.7,H,0),U,3)<$$NOW^XLFDT() Q
.S ACTIVE=H
Q ACTIVE
;
WL23(INP23,WLI) ;Patient Contacts
N STR23,WLASD,WLASDH,WLDATA1,WLERR1,WLI1,WLIENS,WLIENS1,WLRET1,FDA
N WLUSR,X,Y,%DT
S WLIENS=WLI_","
F WLI1=1:1:$L(INP23,"::") D
.S STR23=$P(INP23,"::",WLI1)
.K FDA
. ;
. ; Change date/time conversion so midnight is handled properly. wtc 694 5/17/18
. ;
. S WLASD=$$NETTOFM^SDECDATE($P($P(STR23,"~~",1),":",1,2),"Y","N") ;
. ;S %DT="T" S X=$P($P(STR23,"~~",1),":",1,2) D ^%DT S WLASD=Y
.I (WLASD=-1)!(WLASD="") Q
.S WLASDH="" ;$O(^SDWL(409.3,WLI,4,"B",WLASD,0))
.S WLIENS1=$S(WLASDH'="":WLASDH,1:"+1")_","_WLIENS
.S FDA=$NA(FDA(409.344,WLIENS1))
.I WLASDH'="" D
..D GETS^DIQ(409.344,WLIENS1,"*","IE","WLDATA1","WLERR1")
..I $P(STR23,"~~",1)'="" S @FDA@(.01)=$P($P(STR23,"~~",1),":",1,2) ;DATE ENTERED external date/time
..I $P(STR23,"~~",2)'="" S WLUSR=$P(STR23,"~~",2) S @FDA@(2)=$S(WLUSR="":"@",+WLUSR:$P($G(^VA(200,WLUSR,0)),U,1),1:WLUSR) ;PC ENTERED BY USER
..I $P(STR23,"~~",4)'="" S @FDA@(3)=$P(STR23,"~~",4) ;ACTION C=Called; M=Message Left; L=LETTER
..I $P(STR23,"~~",5)'="" S @FDA@(4)=$P(STR23,"~~",5) ;PATIENT PHONE
..;I $P(STR23,"~~",6)'="" S @FDA@(5)=$E($P(STR23,"~~",6),1,160) ;COMMENT
.I WLASDH="" D
..I $P(STR23,"~~",1)'="" S @FDA@(.01)=$P($P(STR23,"~~",1),":",1,2) ;DATE ENTERED external date/time
..I $P(STR23,"~~",2)'="" S WLUSR=$P(STR23,"~~",2) S @FDA@(2)=$S(WLUSR="":"@",+WLUSR:$P($G(^VA(200,WLUSR,0)),U,1),1:WLUSR) ;PC ENTERED BY USER
..I $P(STR23,"~~",4)'="" S @FDA@(3)=$P(STR23,"~~",4) ;ACTION C=Called; M=Message Left; L=LETTER
..I $P(STR23,"~~",5)'="" S @FDA@(4)=$P(STR23,"~~",5) ;PATIENT PHONE
..;I $P(STR23,"~~",6)'="" S @FDA@(5)=$E($P(STR23,"~~",6),1,160) ;COMMENT
.D:$D(@FDA) UPDATE^DIE("E","FDA","WLRET1","WLMSG1")
.;D:$D(@FDA) UPDATE^DIE("E","FDA","WLRET1")
Q
;
WLAUD(WLIEN,WLCLIN,SDCL,WLSTOP,DATE,USER) ;populate VS AUDIT multiple field 45
; WLIEN - (required) pointer to SDEC APPT REQUEST file 409.85
; WLCLIN - (optional) pointer to SD WL SPECIFIC CLINIC
; SDCL - (optional) pointer to HOSPITAL LOCATION file 44
; WLSTOP - (optional) pointer to CLINIC STOP file
; DATE - (optional) date/time in fileman format
N SDFDA,SDP,SDPN
S WLIEN=$G(WLIEN) Q:WLIEN=""
S WLCLIN=$G(WLCLIN)
S SDCL=$G(SDCL)
S WLSTOP=$G(WLSTOP)
S SDP=$O(^SDWL(409.3,WLIEN,6,9999999),-1)
I +SDP S SDPN=^SDWL(409.3,WLIEN,6,SDP,0) I $P(SDPN,U,3)=WLCLIN,$P(SDPN,U,4)=SDCL,$P(SDPN,U,5)=WLSTOP Q
S DATE=$G(DATE) S:DATE="" DATE=$E($$NOW^XLFDT,1,12)
S USER=$G(USER) S:USER="" USER=DUZ
S SDFDA(409.345,"+1,"_WLIEN_",",.01)=DATE
S SDFDA(409.345,"+1,"_WLIEN_",",1)=USER
S:WLCLIN'="" SDFDA(409.345,"+1,"_WLIEN_",",2)=WLCLIN
S:SDCL'="" SDFDA(409.345,"+1,"_WLIEN_",",3)=SDCL
S:WLSTOP'="" SDFDA(409.345,"+1,"_WLIEN_",",4)=WLSTOP
D UPDATE^DIE("","SDFDA")
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HSDECWL2 15438 printed Nov 22, 2024@18:03:01 Page 2
SDECWL2 ;ALB/SAT,WTC,LAB - VISTA SCHEDULING RPCS ;Apr 10, 2020@15:22
+1 ;;5.3;Scheduling;**627,642,658,665,694,745**;Aug 13, 1993;Build 40
+2 ;;Per VHA Directive 2004-038, this routine should not be modified
+3 ;
+4 QUIT
+5 ;
WLSET(RET,INP) ;Waitlist Set
+1 ;SD*5.3*745 replace external 'INP...' due to XINDEX issue. Parameters are then rolled into the INP array
+2 ;WLSET(RET,S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14,S15,S16,S17,S18,S19,S20,S21,S22,S23,S24,S25,S26,SD27) external parameter tag in SDEC
+3 ; INP - Input parameters array
+4 ; INP(1) = (integer) Wait List IEN point to
+5 ; SD WAIT LIST file 409.3.
+6 ; If null, a new entry will be added
+7 ; INP(2) = (text) DFN Pointer to the PATIENT file 2
+8 ; INP(3) = (date) Originating Date/time in external date form
+9 ; INP(4) = (text) Institution name NAME field from the INSTITUTION file
+10 ; INP(5) = (text) Wait List Type
+11 ; PCMM TEAM ASSIGNMENT
+12 ; PCMM POSITION ASSIGNMENT
+13 ; SERVICE/SPECIALITY
+14 ; SPECIFIC CLINIC
+15 ; INP(6) = (text) WL Specific Team name - NAME field in the TEAM file 404.51
+16 ; INP(7) = (text) WL Specific Position name - NAME field in the
+17 ; TEAM POSITION file 404.57.
+18 ; INP(8) = (text) WL Service/Specialty name - NAME field in
+19 ; SD WL SERVICE/SPECIALTY file 409.31 OR ien from 409.31
+20 ; INP(9) = (text) WL Specific Clinic name - NAME field in
+21 ; SD WL CLINIC LOCATION file 409.32.
+22 ; INP(10) = (text) Originating User name - NAME field in NEW PERSON file 200
+23 ; INP(11) = (text) Priority - 'ASAP' or 'FUTURE'
+24 ; INP(12) = (text) Request By - 'PROVIDER' or 'PATIENT'
+25 ; INP(13) = (text) Provider name - NAME field in NEW PERSON file 200
+26 ; INP(14) = (date) Desired Date of appointment in external format.
+27 ; INP(15) = (text) comment must be 1-60 characters
+28 ; INP(16) = (text) EWL Enrollee Status
+29 ; NEW
+30 ; ESTABLISHED
+31 ; PRIOR
+32 ; UNDETERMINED
+33 ; INP(17) = (text) NOT USED - PATIENT TELEPHONE 4-20 characters
+34 ; INP(18) = (text) ENROLLMENT PRIORITY - Valid Values are:
+35 ; GROUP 1
+36 ; GROUP 2
+37 ; GROUP 3
+38 ; GROUP 4
+39 ; GROUP 5
+40 ; GROUP 6
+41 ; GROUP 7
+42 ; GROUP 8
+43 ; INP(19) = (text) NOT USED - APPT SCHEDULED DATE
+44 ; INP(20) = (text) <NOT USED> MULTIPLE APPOINTMENT RTC NO; YES
+45 ; INP(21) = (integer) <NOT USED> MULT APPT RTC INTERVAL integer between 1-365
+46 ; INP(22) = (integer) <NOT USED> MULT APPT NUMBER integer between 1-100
+47 ; INP(23) = Patient Contacts separated by ::
+48 ; Each :: piece has the following ~~ pieces:
+49 ; 1) = (date) DATE ENTERED external date/time
+50 ; 2) = (text) PC ENTERED BY USER ID or NAME - Pointer to NEW PERSON file or NAME
+51 ; 4) = (text) ACTION - 'CALLED', 'MESSAGE LEFT', or 'LETTER'
+52 ; 5) = (optional) PATIENT PHONE Free-Text 4-20 characters
+53 ; 6) = NOT USED (optional) Comment 1-160 characters
+54 ; INP(24) = (optional) SERVICE CONNECTED PRIORITY valid values are NO YES
+55 ; INP(25) = (optional) SERVICE CONNECTED PERCENTAGE = numeric 0-100
+56 ; INP(27) = (optional) Appointment Type ID pointer to APPOINTMENT TYPE file 409.1
+57 ;
+58 NEW X,Y,%DT
+59 NEW DFN,MI,WLIEN,WLORIGDT,WLINST,WLINSTI,WLTYPE,WLTEAM,WLPOS,WLSRVSP,WLCLIN
+60 NEW WLUSER,WLPRIO,WLREQBY,WLPROV,WLDAPTDT,WLCOMM,WLEESTAT,WLEDT,WLQUIT
+61 NEW AUDF,FNUM,FDA,WLNEW,WLRET,WLMSG,WLDATA,WLERR,WLHOS
+62 NEW WLAPTYP,WLPATTEL,WLENPRI,WLSVCCON,WLSVCCOP
+63 SET (AUDF,WLQUIT)=0
+64 SET FNUM=$$FNUM^SDECWL
+65 SET RET="I00020ERRORID^T00030ERRORTEXT"_$CHAR(30)
+66 ; Use MERGE instead of SET so we can know if values were actually specified or not.
+67 ; This way, if a value is null, we will delete any previous value,
+68 ; but if it is missing, then we will just ignore it.
+69 MERGE WLIEN=INP(1)
+70 SET WLHOS=""
+71 SET DFN=$GET(INP(2))
+72 IF '+DFN
SET RET=RET_"-1^Invalid Patient ID."_$CHAR(30,31)
QUIT
+73 IF '$DATA(^DPT(DFN,0))
SET RET=RET_"-1^Invalid Patient ID"_$CHAR(30,31)
QUIT
+74 SET WLEDT=$PIECE($GET(INP(3)),":",1,2)
+75 ;
+76 ; Change date/time conversion so midnight is handled properly. wtc 694 5/17/18
+77 ;
+78 ;
SET WLEDT=$$NETTOFM^SDECDATE(WLEDT,"Y","N")
IF WLEDT=-1
SET RET=RET_"-1^Invalid Origination date."_$CHAR(30,31)
QUIT
+79 ;S %DT="TX" S X=WLEDT D ^%DT S WLEDT=Y
+80 ;I Y=-1 S RET=RET_"-1^Invalid Origination date."_$C(30,31) Q
+81 SET WLORIGDT=$PIECE(WLEDT,".",1)
+82 SET WLINST=$GET(INP(4))
IF WLINST'=""
Begin DoDot:1
+83 IF '+WLINST
SET WLINST=$ORDER(^DIC(4,"B",WLINST,0))
End DoDot:1
+84 SET WLTYPE=$GET(INP(5))
IF WLTYPE'=""
SET WLTYPE=$SELECT(WLTYPE="PCMM TEAM ASSIGNMENT":1,WLTYPE="PCMM POSSITION ASSIGNMENT":2,WLTYPE="SERVICE/SPECIALITY":3,WLTYPE="SPECIFIC CLINIC":4,+WLTYPE:+WLTYPE,1:"")
+85 IF WLTYPE=""