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

SDECAR2.m

Go to the documentation of this file.
  1. SDECAR2 ;ALB/SAT/JSM,WTC,LAB,JAS,LAB/JAS - VISTA SCHEDULING RPCS ; NOV 22, 2024
  1. ;;5.3;Scheduling;**627,642,658,671,686,694,745,799,805,820,823,893,895**;Aug 13, 1993;Build 11
  1. ;;Per VHA Directive 6402, this routine should not be modified
  1. ;
  1. Q
  1. ;
  1. ARSET(RET,INP) ;Appointment Request Set
  1. ;SD*5.3*745 replace external 'INP...' due to XINDEX issue. Parameters are then rolled into the INP array
  1. ;ARSET(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,S27,S28,S29) external parameter tag in SDEC
  1. ; INP - Input parameters array
  1. ; INP(1) = (integer) Wait List IEN point to SDEC APPT REQUEST file 409.85.
  1. ; If null, a new entry will be added
  1. ; INP(2) = (text) DFN Pointer to the PATIENT file 2
  1. ; INP(3) = (date) Originating Date/time in external date form
  1. ; INP(4) = (text) Institution name NAME field from the INSTITUTION file
  1. ; INP(5) = (text) Request Type
  1. ; INP(6) = (text) REQ Specific Clinic name - NAME field in file 44
  1. ; INP(7) = (text) Originating User name - NAME field in NEW PERSON file 200
  1. ; INP(8) = (text) Priority - 'ASAP' or 'FUTURE'
  1. ; INP(9) = (text) Request By - 'PROVIDER' or 'PATIENT'
  1. ; INP(10) = (text) Provider name - NAME field in NEW PERSON file200
  1. ; INP(11) = (date) Desired Date of appointment in external format.
  1. ; INP(12) = (text) comment must be 1-60 characters.
  1. ; INP(13) = (text) ENROLLMENT PRIORITY - Valid Values: GROUP 1-8
  1. ; INP(14) = (text) MULTIPLE APPOINTMENT RTC NO; YES
  1. ; INP(15) = (integer) MULT APPT RTC INTERVAL integer between 1-365
  1. ; INP(16) = (integer) MULT APPT NUMBER integer between 1-100
  1. ; INP(17) = Patient Contacts separated by ::
  1. ; Each :: piece has the following ~~ pieces:
  1. ; 1) = (date) DATE ENTERED external date/time
  1. ; 2) = (text) PC ENTERED BY USER ID or NAME - Pointer toNEW PERSON file or NAME
  1. ; 4) = (optional) ACTION - valid values are: CALLED;MESSAGE LEFT;LETTER
  1. ; 5) = (optional) PATIENT PHONE Free-Text 4-20 characters
  1. ; 6) = NOT USED (optional) Comment 1-160 characters
  1. ; INP(18) = (optional) SERVICE CONNECTED PRIORITY valid values are NO YES
  1. ; INP(19) = (optional) SERVICE CONNECTED PERCENTAGE = numeric 0-100
  1. ; INP(20) = (optional) MRTC calculated preferred dates separated by pipe |: Each date can be in external format with no time.
  1. ; INP(21) = (optional) CLINIC STOP pointer to CLINIC STOP file 40.7 used to populate the REQ SERVICE/SPECIALTY field in 409.85
  1. ; INP(22) = (optional) Appointment Type ID pointer to APPOINTMENT TYPE file 409.1
  1. ; INP(23) = (optional) Patient Status: N = NEW, E = ESTABLISHED
  1. ; INP(24) = (optional) MULT APPTS MADE
  1. ; list of child pointers to SDEC APPOINTMENT and/orSDEC APPT REQUEST files separated by pipe
  1. ; each pipe piece contains the following ~ pieces:
  1. ; 1. Appointment Id pointer to SDEC APPOINTMENT file 409.84
  1. ; 2. Request Id pointer to SDEC APPT REQUEST file 409.85
  1. ; INP(25) = (optional) PARENT REQUEST pointer to SDEC APPT REQUEST file 409.85
  1. ; INP(26) = (optional) NLT (No later than) [CPRS RTC REQUIREMENT]
  1. ; INP(27) = (optional) PREREQ (Prerequisites) [CPRS RTC REQUIREMENT]
  1. ; INP(28) = (optional) ORDER IEN [CPRS RTC REQUIREMENT]
  1. ; INP(29) = (optional) VAOS GUID
  1. ;
  1. N X,Y,%DT
  1. N DFN,MI,ARAPTYP,ARIEN,ARORIGDT,ARORIGDTI,ARINST,ARINSTI,ARTYPE,ARTEAM,ARPOS,ARSRVSP,ARCLIN
  1. N ARUSER,ARPRIO,ARREQBY,ARPROV,ARDAPTDT,ARCOMM,AREESTAT,AREDT,ARQUIT
  1. N FNUM,FDA,ARNEW,ARRET,ARMSG,ARDATA,ARERR,ARHOSN,AUDF,SDREC
  1. N ARMAI,ARMAN,ARMAR,ARPARENT,ARPATTEL,ARENPRI,ARSTOP,ARSVCCON,ARSVCCOP,PIDHIEN,PIDCHECK,VAOSGUID
  1. S (ARQUIT,AUDF)=0
  1. S FNUM=$$FNUM^SDECAR
  1. S RET="I00020ERRORID^T00030ERRORTEXT"_$C(30)
  1. ; Use MERGE instead of SET so we can know if values were actually specified or not.
  1. ; This way, if a value is null, we will delete any previous value, but if it is missing, then we will just ignore it.
  1. M ARIEN=INP(1)
  1. S DFN=$G(INP(2))
  1. I '+DFN S RET=RET_"-1^Invalid Patient ID."_$C(30,31) Q
  1. I '$D(^DPT(DFN,0)) S RET=RET_"-1^Invalid Patient ID"_$C(30,31) Q
  1. S AREDT=$P($G(INP(3)),":",1,2)
  1. S AREDT=$$NETTOFM^SDECDATE(AREDT,$S(AREDT["@":"Y",1:"N")) ;
  1. I AREDT=-1 S RET=RET_"-1^Invalid Origination date."_$C(30,31) Q
  1. S ARORIGDT=$P(AREDT,".",1)
  1. S ARINST=$G(INP(4)) I ARINST'="" D
  1. .I '+ARINST S ARINST=$O(^DIC(4,"B",ARINST,0))
  1. M ARTYPE=INP(5)
  1. S ARCLIN=$G(INP(6))
  1. I ARCLIN'="" D
  1. .I +ARCLIN=ARCLIN D
  1. ..I '$D(^SC(+ARCLIN,0)) S RET=RET_"-1^"_ARCLIN_" is an invalid Clinic ID."_$C(30,31) S ARQUIT=1 Q
  1. .I '(+ARCLIN=ARCLIN) D
  1. ..S ARCLIN=$O(^SC("B",ARCLIN,0))
  1. ..I ARCLIN="" S RET=RET_"-1^"_ARCLIN_" is an invalid Clinic Name."_$C(30,31) S ARQUIT=1 Q
  1. Q:ARQUIT=1
  1. S ARUSER=$G(INP(7))
  1. I ARUSER'="" I '+ARUSER S ARUSER=$O(^VA(200,"B",ARUSER,0))
  1. I ARUSER="" S ARUSER=DUZ
  1. S ARREQBY=$G(INP(9)) I ARREQBY'="" D
  1. .S ARREQBY=$S(ARREQBY="PATIENT":2,ARREQBY="PROVIDER":1,1:"")
  1. S ARPROV=$G(INP(10)) I ARPROV'="" I '+ARPROV S ARPROV=$O(^VA(200,"B",ARPROV,0))
  1. S ARDAPTDT=INP(11)
  1. S %DT="" S X=$P($G(ARDAPTDT),"@",1) D ^%DT S ARPRIO=$S(Y=$P($$NOW^XLFDT,".",1):"A",1:"F")
  1. S ARDAPTDT=Y
  1. I Y=-1 S ARDAPTDT=""
  1. S (INP(12),ARCOMM)=$TR($G(INP(12)),"^"," ")
  1. S ARENPRI=$G(INP(13)) D
  1. .S:ARENPRI'="" ARENPRI=$S(ARENPRI="GROUP 1":1,ARENPRI="GROUP 2":2,ARENPRI="GROUP3":3,ARENPRI="GROUP4":4,ARENPRI="GROUP 5":5,ARENPRI="GROUP 6":6,ARENPRI="GROUP 7":7,ARENPRI="GROUP 8":8,1:ARENPRI)
  1. S ARMAR=$G(INP(14)) I ARMAR'="" S ARMAR=$S(ARMAR="YES":1,1:0)
  1. M ARMAI=INP(15)
  1. M ARMAN=INP(16)
  1. S ARSVCCON=$G(INP(18)) S:ARSVCCON'="" ARSVCCON=$S(ARSVCCON="YES":1,1:0)
  1. M ARSVCCOP=INP(19) I $G(ARSVCCOP)'="" S ARSVCCOP=+$G(ARSVCCOP) S:(+ARSVCCOP<0)!(+ARSVCCOP>100) ARSVCCOP=""
  1. S ARSTOP=$G(INP(21))
  1. I ARSTOP'="",ARCLIN'="" S RET=RET_"-1^Cannot include both Clinic and Service."_$C(30,31) Q
  1. S ARAPTYP=+$G(INP(22)) I +ARAPTYP,'$D(^SD(409.1,ARAPTYP,0)) S ARAPTYP=""
  1. S ARPARENT=+$G(INP(25)) I +ARPARENT,'$D(^SDEC(409.85,+ARPARENT,0)) S ARPARENT=""
  1. S ARNLT=+$G(INP(26))
  1. S ARPRER=$G(INP(27))
  1. S ARORDN=+$G(INP(28))
  1. ;CHECK FOR MISSING NLT,PREREQ,ORDER IEN ON MULTIPLE APPT REQUESTS
  1. I +ARPARENT>0&(+$G(INP(26))=0) D
  1. .S ARNLT=$P($G(^SDEC(409.85,+ARPARENT,7)),U,2)
  1. I +ARPARENT>0&($G(INP(27))="") D
  1. .N PRIEN,PR
  1. .S PRIEN=0 F S PRIEN=$O(^SDEC(409.85,+ARPARENT,8,PRIEN)) Q:PRIEN'>0 D
  1. ..S PR=$P($G(^SDEC(409.85,+ARPARENT,8,PRIEN,0)),"^") Q:PR=""
  1. ..S ARPRER=$S(ARPRER'="":ARPRER_";"_PR,1:PR)
  1. I +ARPARENT>0&(+$G(INP(28))=0) D
  1. .S ARORDN=$P($G(^SDEC(409.85,+ARPARENT,7)),U,1)
  1. S VAOSGUID=$G(INP(29))
  1. S ARIEN=$G(ARIEN)
  1. S ARNEW=ARIEN=""
  1. N LASTNOTE S LASTNOTE=""
  1. I ARNEW D
  1. . S AUDF=1
  1. . S FDA=$NA(FDA(FNUM,"+1,"))
  1. . S @FDA@(.01)=+DFN
  1. . ;This handles the date/time coming in as "8/27/2014 12:00:00 AM"
  1. . S:$G(ARORIGDT)'="" @FDA@(1)=ARORIGDT
  1. . S:$G(ARINST)'="" @FDA@(2)=+ARINST
  1. . S:$G(ARTYPE)'="" @FDA@(4)=$S(ARTYPE="APPOINTMENT":"APPT",1:ARTYPE) ;
  1. . S:$G(VAOSGUID)'="" @FDA@(5)=VAOSGUID
  1. . S:$G(ARCLIN)'="" @FDA@(8)=+ARCLIN
  1. . S:$G(ARSTOP)'="" @FDA@(8.5)=+ARSTOP
  1. . S:+ARAPTYP @FDA@(8.7)=+ARAPTYP
  1. . S:$G(ARUSER)'="" @FDA@(9)=+ARUSER
  1. . S:$G(AREDT)'="" @FDA@(9.5)=AREDT
  1. . S:$G(ARPRIO)'="" @FDA@(10)=ARPRIO
  1. . S:$G(ARENPRI)'="" @FDA@(10.5)=ARENPRI
  1. . S:$G(ARREQBY)'="" @FDA@(11)=ARREQBY
  1. . S:$G(ARPROV)'="" @FDA@(12)=+ARPROV
  1. . S:$G(ARSVCCOP)'="" @FDA@(14)=ARSVCCOP
  1. . S:$G(ARSVCCON)'="" @FDA@(15)=+ARSVCCON
  1. . S:$G(ARDAPTDT)'="" @FDA@(22)=ARDAPTDT
  1. . S:$G(ARNLT)'="" @FDA@(47)=ARNLT
  1. . D FDAPRER(.FDA,ARPRER,"+1")
  1. . S:(+$G(ARORDN)'=0) @FDA@(46)=ARORDN
  1. . S @FDA@(23)="O"
  1. . I $G(ARCOMM)'="" D
  1. . . S ARCOMM=$$CTRL^XMXUTIL1(ARCOMM)
  1. . . S @FDA@(25)=ARCOMM
  1. . S:$G(ARMAR)'="" @FDA@(41)=ARMAR
  1. . I +ARMAR,$G(ARMAI)'="" S @FDA@(42)=ARMAI
  1. . I +ARMAR,$G(ARMAN)'="" S @FDA@(43)=ARMAN
  1. . S:$G(INP(23))'="" @FDA@(.02)=$S(INP(23)="N":"N",INP(23)="NEW":"N",INP(23)="E":"E",INP(23)="ESTABLISHED":"E",1:"")
  1. . I $G(ARPARENT) D
  1. . . S @FDA@(43.1)=$$MRTCHILDSEQUENCE($G(ARPARENT),$G(DFN))
  1. . S:+ARPARENT @FDA@(43.8)=+ARPARENT
  1. . S @FDA@(49)=0 ; setting initial appt req PID change allowed field to no.
  1. E D
  1. . S ARIEN=ARIEN_"," ; Append the comma for both
  1. . K ARDATA,ARERR
  1. . D GETS^DIQ(FNUM,ARIEN,"*","IE","ARDATA","ARERR")
  1. . I $D(ARERR) M ARMSG=ARERR K FDA Q
  1. . S FDA=$NA(FDA(FNUM,ARIEN))
  1. . I $D(ARORIGDT) D
  1. . . S ARORIGDT=$P(ARORIGDT,"@",1) S %DT="" S X=ARORIGDT D ^%DT S ARORIGDTI=Y
  1. . . I ARORIGDTI'=ARDATA(FNUM,ARIEN,1,"I") S @FDA@(1)=$S(ARORIGDT="":"@",1:ARORIGDT)
  1. . I $D(ARINST),ARINST'=ARDATA(FNUM,ARIEN,2,"I") S @FDA@(2)=+ARINST
  1. . I $D(ARTYPE),ARTYPE'=ARDATA(FNUM,ARIEN,4,"E") S @FDA@(4)=$S(ARTYPE="APPOINTMENT":"APPT",ARTYPE="MOBILE":"MOBILE",1:ARTYPE)
  1. . I $G(VAOSGUID)'="",VAOSGUID'=ARDATA(FNUM,ARIEN,5,"I") S @FDA@(5)=VAOSGUID
  1. . I ARCLIN'="",ARCLIN'=ARDATA(FNUM,ARIEN,8,"I") S @FDA@(8)=+ARCLIN,AUDF=1 S:ARDATA(FNUM,ARIEN,8.5,"I")'="" @FDA@(8.5)="@"
  1. . I ARSTOP'="",ARSTOP'=ARDATA(FNUM,ARIEN,8.5,"I") S @FDA@(8.5)=+ARSTOP,AUDF=1 S:ARDATA(FNUM,ARIEN,8,"I")'="" @FDA@(8)="@"
  1. . S:+ARAPTYP @FDA@(8.7)=+ARAPTYP
  1. . I $D(ARUSER),ARUSER'=ARDATA(FNUM,ARIEN,9,"I") S @FDA@(9)=+ARUSER
  1. . I $D(AREDT),AREDT'=$G(ARDATA(FNUM,ARIEN,9.5,"I")) S @FDA@(9.5)=AREDT
  1. . I $D(ARPRIO),ARPRIO'=ARDATA(FNUM,ARIEN,10,"I") S @FDA@(10)=$S(ARPRIO="":"@",1:ARPRIO)
  1. . I $D(ARENPRI),ARENPRI'=ARDATA(FNUM,ARIEN,10.5,"E") S @FDA@(10.5)=ARENPRI
  1. . I $D(ARREQBY),ARREQBY'=ARDATA(FNUM,ARIEN,11,"I") S @FDA@(11)=$S(ARREQBY="":"@",1:ARREQBY)
  1. . I $D(ARPROV),ARPROV'=ARDATA(FNUM,ARIEN,12,"I") S @FDA@(12)=+ARPROV
  1. . I $D(ARSVCCOP),ARSVCCOP'=$G(ARDATA(FNUM,ARIEN,14,"I")) S @FDA@(14)=ARSVCCOP
  1. . I $D(ARSVCCON),ARSVCCON'=ARDATA(FNUM,ARIEN,15,"E") S @FDA@(15)=+ARSVCCON
  1. . I $D(ARDAPTDT),ARDAPTDT'=ARDATA(FNUM,ARIEN,22,"I") S @FDA@(22)=$S(ARDAPTDT="":"@",1:ARDAPTDT)
  1. . I $D(ARCOMM),ARCOMM'=ARDATA(FNUM,ARIEN,25,"I") D
  1. . . S LASTNOTE=ARDATA(FNUM,ARIEN,25,"I")
  1. . . S ARCOMM=$$CTRL^XMXUTIL1(ARCOMM)
  1. . . S @FDA@(25)=$S(ARCOMM="":"@",1:ARCOMM)
  1. . S:$G(ARMAR)'="" @FDA@(41)=ARMAR
  1. . S:$G(ARMAI)'="" @FDA@(42)=ARMAI
  1. . S:$G(ARMAN)'="" @FDA@(43)=ARMAN
  1. . S:$G(ARNLT)'="" @FDA@(47)=ARNLT
  1. . D DELPRER(+ARIEN)
  1. . D FDAPRER(.FDA,ARPRER,+ARIEN)
  1. . S:+$G(ARORDN)'=0 @FDA@(46)=ARORDN
  1. . S:$G(INP(23))'="" @FDA@(.02)=$S(INP(23)="N":"N",INP(23)="NEW":"N",INP(23)="E":"E",INP(23)="ESTABLISHED":"E",1:"")
  1. . S:+ARPARENT @FDA@(43.8)=+ARPARENT
  1. ; Only call UPDATE^DIE if there are any array entries in FDA
  1. D:$D(FDA)>9 UPDATE^DIE("","FDA","ARRET","ARMSG")
  1. ; Add PID History entry for appt req
  1. S AREQIEN=$S($G(ARIEN):ARIEN,1:$G(ARRET(1)))
  1. ; 409.85 COMMENTS AUDIT multiple
  1. I $L(ARCOMM),$L(AREQIEN) D
  1. . N LASTLENGTH,NEWLENGTH,NEWNOTE
  1. . S NEWNOTE=ARCOMM
  1. . I $L(LASTNOTE) D
  1. . . S LASTLENGTH=$L(LASTNOTE),NEWLENGTH=$L(ARCOMM)
  1. . . S:NEWNOTE[LASTNOTE NEWNOTE=$E(ARCOMM,(LASTLENGTH+1),NEWLENGTH)
  1. . S:$E(NEWNOTE,1,1)=" " NEWNOTE=$E(NEWNOTE,2,$L(NEWNOTE))
  1. . N CAFDA
  1. . S CAFDA(409.8527,"+1,"_+AREQIEN_",",.01)=$$NOW^XLFDT
  1. . S CAFDA(409.8527,"+1,"_+AREQIEN_",",1)=$S($G(ARUSER):ARUSER,1:DUZ)
  1. . S CAFDA(409.8527,"+1,"_+AREQIEN_",",2)=NEWNOTE
  1. . D UPDATE^DIE("","CAFDA") K CAFDA
  1. I $G(ARDAPTDT) D
  1. .S ARRET=$G(ARRET(1))
  1. .I $G(ARIEN) S ARRET=ARIEN S ARRET=$TR(ARRET,",","") S PIDCHECK=$$LASTPIDCHECK(ARRET,ARDAPTDT)
  1. .I $G(PIDCHECK)=0 Q
  1. .S ARUSER=$$GET1^DIQ(200,ARUSER,.01,"E")
  1. .S FDA(409.854,"+1,"_ARRET_",",.01)=$$NOW^XLFDT
  1. .S FDA(409.854,"+1,"_ARRET_",",1)=ARDAPTDT
  1. .S FDA(409.854,"+1,"_ARRET_",",2)=ARUSER
  1. .D UPDATE^DIE(,"FDA","PIDHIEN","ERR") K FDA
  1. I $D(ARMSG) D
  1. . F MI=1:1:$G(ARMSG("DIERR")) S RET=RET_"-1^"_$G(ARMSG("DIERR",MI,"TEXT",1))_$C(30)
  1. . S RET=RET_$C(31)
  1. Q:$D(ARMSG)
  1. S ARINSTI=$P($G(^SDEC(409.85,$S(+ARIEN:ARIEN,1:ARRET(1)),0)),U,3)
  1. I $G(INP(17))'="" D AR23(INP(17),$S(+ARIEN:ARIEN,1:ARRET(1))) ;patient contacts
  1. I +ARMAR,$G(INP(20))'="" D AR435(INP(20),$S(+ARIEN:ARIEN,1:ARRET(1))) ;MRTC CALC PREF DATES
  1. I +AUDF D ARAUD($S(+ARIEN:+ARIEN,1:ARRET(1)),ARCLIN,ARSTOP) ;VS AUDIT
  1. I $G(INP(24))'="" N SDI F SDI=1:1:$L(INP(24),"|") S SDREC=$P(INP(24),"|",SDI) D AR433($S(+ARIEN:+ARIEN,1:ARRET(1)),SDREC)
  1. I +ARPARENT D AR433(+ARPARENT,"~"_$S(+ARIEN:+ARIEN,1:ARRET(1)))
  1. I +$G(ARRET(1)) S RET=RET_ARRET(1)_U_$C(30,31)
  1. E S RET=RET_+ARIEN_U_$C(30,31)
  1. Q
  1. ;
  1. LASTPIDCHECK(AREQIEN,ARDAPTDT) ; checking to see if the last PID in the PID HISTORY multiple is different from incoming value
  1. N LASTPIDIEN,LASTPID
  1. S LASTPIDIEN=$O(^SDEC(409.85,AREQIEN,10,"A"),-1)
  1. S LASTPID=$$GET1^DIQ(409.854,LASTPIDIEN_","_AREQIEN_",",1,"I")
  1. I LASTPID=ARDAPTDT Q 0
  1. Q 1
  1. FDAPRER(FDA,ARPRER,ARIEN) ;
  1. N ASEQ,DELIM,PC,PR
  1. Q:$G(ARPRER)=""
  1. S DELIM=";",ASEQ=80
  1. F PC=1:1:$L(ARPRER,DELIM) D
  1. .S PR=$P(ARPRER,DELIM,PC) Q:PR=""
  1. .S ASEQ=ASEQ+1,FDA(409.8548,"+"_ASEQ_","_ARIEN_",",.01)=PR
  1. Q
  1. DELPRER(ARIEN) ;Delete all entries in the PREREQUISITE multiple (#48)
  1. N DIK,DA
  1. Q:$G(ARIEN)'=+$G(ARIEN) Q:ARIEN'>0
  1. S DIK="^SDEC(409.85,"_ARIEN_",8,",DA(1)=ARIEN
  1. S DA=0 F S DA=$O(^SDEC(409.85,ARIEN,8,DA)) Q:DA'>0 D ^DIK
  1. Q
  1. GETPRER(RET,ARIEN) ;
  1. N CC,PR
  1. I $G(^SDEC(409.85,+$G(ARIEN),0))="" S RET="-1^Invalid SDEC APPT REQUEST id "_$G(ARIEN) Q
  1. S RET=""
  1. S CC=0 F S CC=$O(^SDEC(409.85,ARIEN,8,CC)) Q:CC'>0 D
  1. .S PR=$P($G(^SDEC(409.85,ARIEN,8,CC,0)),U,1) Q:PR=""
  1. .S RET=$S(RET'="":RET_U_PR,1:PR)
  1. Q
  1. ARAUD(ARIEN,ARCLIN,ARSTOP,DATE,USER) ;populate VS AUDIT multiple field 45
  1. N SDFDA,SDP,SDPN
  1. S ARIEN=$G(ARIEN) Q:ARIEN=""
  1. S ARCLIN=$G(ARCLIN)
  1. S ARSTOP=$G(ARSTOP)
  1. S SDP=$O(^SDEC(409.85,ARIEN,6,9999999),-1)
  1. I +SDP S SDPN=^SDEC(409.85,ARIEN,6,SDP,0) I $P(SDPN,U,3)=ARCLIN,$P(SDPN,U,4)=ARSTOP Q
  1. S DATE=$G(DATE) S:DATE="" DATE=$E($$NOW^XLFDT,1,12)
  1. S USER=$G(USER) S:USER="" USER=DUZ
  1. S SDFDA(409.8545,"+1,"_ARIEN_",",.01)=DATE
  1. S SDFDA(409.8545,"+1,"_ARIEN_",",1)=USER
  1. S:ARCLIN'="" SDFDA(409.8545,"+1,"_ARIEN_",",2)=ARCLIN
  1. S:ARSTOP'="" SDFDA(409.8545,"+1,"_ARIEN_",",3)=ARSTOP
  1. D UPDATE^DIE("","SDFDA")
  1. Q
  1. AR433(ARIEN,SDEC) ;set MULT APPTS MADE
  1. ; ARIEN = (required) pointer to SDEC APPT REQUEST file 409.85
  1. ; SDEC = (required) child pointers to SDEC APPOINTMENT and SDEC APPTREQUEST file separated by pipe
  1. ; each pipe piece contains the following ~ pieces:
  1. ; 1. Appointment Id pointer to SDEC APPOINTMENT file 409.84
  1. ; 2. Request Id pointer to SDEC APPT REQUEST file 409.85
  1. N SDAPP,SDFDA,SDI,SDIEN
  1. S ARIEN=$G(ARIEN)
  1. Q:'$D(^SDEC(409.85,ARIEN,0))
  1. S SDEC=$G(SDEC)
  1. F SDI=1:1:$L(SDEC,"|") D
  1. .K SDFDA
  1. .S SDAPP=$P(SDEC,"|",SDI)
  1. .I $P(SDAPP,"~",2)="",$P(SDAPP,"~",1)'="" S $P(SDAPP,"~",2)=$P($$GET1^DIQ(409.84,+SDAPP_",",.22,"I"),";",1)
  1. .Q:$P(SDAPP,"~",2)=""
  1. .S SDIEN=$O(^SDEC(409.85,ARIEN,2,"B",$P(SDAPP,"~",2),0))
  1. .S SDIEN=$S(SDIEN'="":SDIEN,1:"+1")
  1. .I $D(^SDEC(409.85,+$P(SDAPP,"~",2),0)) S SDFDA(409.852,SDIEN_","_ARIEN_",",.01)=+$P(SDAPP,"~",2)
  1. .I $D(^SDEC(409.84,+$P(SDAPP,"~",1),0)) S SDFDA(409.852,SDIEN_","_ARIEN_",",.02)=+$P(SDAPP,"~",1)
  1. .D:$D(SDFDA) UPDATE^DIE("","SDFDA")
  1. Q
  1. AR433D(SDEC) ;delete MULT APPTS MADE
  1. ;SDEC = (required) pointers to SDEC APPOINTMENT file 409.84 separated by pipe
  1. N ARIEN,DFN,DIEN,SDAPP,SDFDA,SDI,SDJ,SDTYP
  1. S SDEC=$G(SDEC)
  1. F SDI=1:1:$L(SDEC,"|") D
  1. .S SDAPP=$P(SDEC,"|",SDI)
  1. .Q:'$D(^SDEC(409.84,SDAPP,0))
  1. .S DFN=$$GET1^DIQ(409.84,SDAPP_",",.05,"I")
  1. .S SDTYP=$$GET1^DIQ(409.84,SDAPP_",",.22,"I"),DIEN=$P(SDTYP,";",1)
  1. .I $P(SDTYP,";",2)="SDEC(409.85," S ARIEN="" F S ARIEN=$O(^SDEC(409.85,"B",DFN,ARIEN)) Q:ARIEN="" D
  1. ..S SDJ="" F S SDJ=$O(^SDEC(409.85,ARIEN,2,"B",DIEN,SDJ)) Q:SDJ="" D
  1. ...S SDFDA(409.852,SDJ_","_ARIEN_",",.01)="@"
  1. ...D UPDATE^DIE("","SDFDA")
  1. Q
  1. AR438(ARIEN,SDPARENT,SDEC) ;set PARENT REQUEST field 43.8; set as child in MULTAPPTS MADE in parent request
  1. N SDFDA
  1. I $G(SDPARENT)'="" S SDFDA(409.85,ARIEN_",",43.8)=SDPARENT D UPDATE^DIE("","SDFDA")
  1. Q
  1. AR435(SDDT,ARIEN) ;
  1. ; ARIEN - Requested date ID pointer to SDEC REQUESTED APPT file 409.85
  1. ; SDDT - MRTC calculated preferred dates separated by pipe |:
  1. ; Each date can be in external format with no time.
  1. N SDI,SDJ,SDFDA,X,Y,%DT
  1. F SDI=1:1:$L(SDDT,"|") D
  1. .S %DT="" S X=$P($P(SDDT,"|",SDI),"@",1) D ^%DT S SDJ=Y
  1. .Q:SDJ=-1
  1. .Q:$O(^SDEC(409.85,ARIEN,5,"B",SDJ,0)) ;don't add duplicates
  1. .S SDFDA(409.851,"+1,"_ARIEN_",",.01)=SDJ
  1. .D UPDATE^DIE("","SDFDA")
  1. Q
  1. WLACT(NAME) ;
  1. N ACTIVE,H
  1. S ACTIVE=""
  1. S H="" F S H=$O(^DIC(40.7,"B",NAME,H)) Q:H="" D Q:ACTIVE'=""
  1. .I $P(^DIC(40.7,H,0),U,3)'="",$P(^DIC(40.7,H,0),U,3)<$$NOW^XLFDT() Q
  1. .S ACTIVE=H
  1. Q ACTIVE
  1. AR23(INP17,ARI) ;Patient Contacts
  1. N STR17,ARASD,ARASDH,ARDATA1,ARERR1,ARI1,ARIENS,ARIENS1,ARRET1,FDA
  1. N ARDT,ARUSR,X,Y,%DT
  1. S ARIENS=ARI_","
  1. F ARI1=1:1:$L(INP17,"::") D
  1. .S STR17=$P(INP17,"::",ARI1)
  1. .K FDA
  1. . S ARASD=$P($P(STR17,"~~",1),":",1,2),ARASD=$$NETTOFM^SDECDATE(ARASD,"Y")
  1. .I (ARASD=-1)!(ARASD="") Q
  1. .S ARDT=$P($P(STR17,"~~",1),":",1,2)
  1. .S ARASDH=""
  1. .S ARIENS1=$S(ARASDH'="":ARASDH,1:"+1")_","_ARIENS
  1. .S FDA=$NA(FDA(409.8544,ARIENS1))
  1. .I ARASDH'="" D
  1. ..D GETS^DIQ(409.8544,ARIENS1,"*","IE","ARDATA1","ARERR1")
  1. ..I $P(STR17,"~~",1)'="" S @FDA@(.01)=ARDT ;DATE ENTERED external date/time
  1. ..I $P(STR17,"~~",2)'="" S ARUSR=$P(STR17,"~~",2) S @FDA@(2)=$S(ARUSR="":"@",+ARUSR:$P($G(^VA(200,ARUSR,0)),U,1),1:ARUSER) ;PC ENTERED BY USER
  1. ..I $P(STR17,"~~",4)'="" S @FDA@(3)=$P(STR17,"~~",4) ;ACTION C=Called; M=Message Left; L=LETTER
  1. ..I $P(STR17,"~~",5)'="" S @FDA@(4)=$P(STR17,"~~",5) ;PATIENT PHONE
  1. .I ARASDH="" D
  1. ..I $P(STR17,"~~",1)'="" S @FDA@(.01)=ARDT ;DATE ENTERED external date/time
  1. ..I $P(STR17,"~~",2)'="" S ARUSR=$P(STR17,"~~",2) S @FDA@(2)=$S(ARUSR="":"@",+ARUSR:$P($G(^VA(200,ARUSR,0)),U,1),1:ARUSR) ;PC ENTERED BY USER
  1. ..I $P(STR17,"~~",4)'="" S @FDA@(3)=$P(STR17,"~~",4) ;ACTION C=Called; M=Message Left; L=LETTER
  1. ..I $P(STR17,"~~",5)'="" S @FDA@(4)=$P(STR17,"~~",5) ;PATIENT PHONE
  1. .D:$D(@FDA) UPDATE^DIE("E","FDA","ARRET1","ARMSG1")
  1. Q
  1. UPDATE(ARIEN,APPDT,SDCL,SVCP,SVCPR,NOTE,SDAPPTYP,EAS) ;update REQ APPT REQUEST at appointment add
  1. ; ARIEN = Appt Request pointer to SD WAIT LIST file 409.85
  1. ; APPDT = Appointment date/time (Scheduled Date of appt) in fm format
  1. ; SDCL = Clinic ID pointer to HOSPITAL LOCATION file 44
  1. ; SVCP = Service Connected Percentage numeric 0-100
  1. ; SVCPR = Service Connected Priority 0:NO 1:YES
  1. ; NOTE = Comment only 1st 60 characters are used
  1. ; SDAPPTYP = (optional) Appointment type ID pointer to APPOINTMENT TYPE file 409.1
  1. ; EAS = (optional) Enterprise Appointment Scheduling Tracking Number associated to an appointment.
  1. ;all input must be verified by calling routine
  1. N SDDIV,SDFDA,SDSN,SDMSG
  1. S:+$G(SDAPPTYP) SDFDA(409.85,ARIEN_",",8.7)=SDAPPTYP
  1. S SDFDA(409.85,ARIEN_",",13)=APPDT ;
  1. S SDFDA(409.85,ARIEN_",",13.1)=$P($$NOW^XLFDT,".",1) ;
  1. S SDFDA(409.85,ARIEN_",",13.2)=SDCL ;
  1. S SDFDA(409.85,ARIEN_",",13.3)=$P($G(^SC(SDCL,0)),U,4) ;
  1. S SDFDA(409.85,ARIEN_",",13.4)=$P($G(^SC(SDCL,0)),U,7) ;
  1. S SDDIV=$P($G(^SC(SDCL,0)),U,15)
  1. S SDSN=$S(SDDIV'="":$P($G(^DG(40.8,SDDIV,0)),U,2),1:"")
  1. S SDFDA(409.85,ARIEN_",",13.6)=SDSN ;
  1. S SDFDA(409.85,ARIEN_",",13.7)=DUZ ;
  1. S SDFDA(409.85,ARIEN_",",13.8)="R" ;
  1. S:SVCP'="" SDFDA(409.85,ARIEN_",",14)=SVCP ;
  1. S:SVCPR'="" SDFDA(409.85,ARIEN_",",15)=SVCPR ;
  1. S:$G(NOTE)'="" SDFDA(409.85,ARIEN_",",25)=NOTE
  1. S:$G(EAS)'="" SDFDA(409.85,ARIEN_",",100)=EAS
  1. D UPDATE^DIE("","SDFDA","","SDMSG")
  1. Q
  1. MRTCHILDSEQUENCE(PARENTREQUESTIEN,DFN) ; return next sequence number for child mrtc
  1. N COUNT,REQUESTIEN,IENS,NEXTSEQUENCENUM,CHILD,LASTCHILD
  1. S REQUESTIEN=0,COUNT=0,LASTCHILD=""
  1. F S REQUESTIEN=$O(^SDEC(409.85,"B",DFN,REQUESTIEN)) Q:'REQUESTIEN D
  1. .I $$GET1^DIQ(409.85,REQUESTIEN,43.8,"I")=PARENTREQUESTIEN D
  1. ..S COUNT=COUNT+1
  1. ..S CHILD(REQUESTIEN)=COUNT
  1. I $D(CHILD) D
  1. .S LASTCHILD=$O(CHILD(LASTCHILD),-1)
  1. .S NEXTSEQUENCENUM=$G(CHILD($G(LASTCHILD)))+1
  1. I '$D(CHILD) S NEXTSEQUENCENUM=1
  1. Q NEXTSEQUENCENUM