- SDECEPT ;SPFO/RT,MGD,LAB,ANU - SCHEDULING ENHANCEMENTS VSE EP API ;JUN 08,2023
- ;;5.3;Scheduling;**669,671,694,794,809,813,823,846**;Aug 13 1993;Build 12
- ;;Per VHA Directive 6402, this routine should not be modified
- ;
- ;The API provides Extended Profile Appt info the VS GUI.
- ;INPUT - DFN required
- ; APP appointment date/time required
- Q
- ;
- INIT ;
- S (PAT0,PAM0,CLIEN,HLF0,HLAPIEN,HLAP0)=""
- ;
- ; PAT0=Global location 0 from Patient file
- ; PAM0=Global location 0 from Patient Appointment Multiple
- ; CLIEN=Clinic IEN
- ; HLF0=Global location 0 from Hospital Location File
- ; HLAPIEN=Hospital Location Appointment Multiple IEN
- ; HLAP0=Global location 0 from Hospital Appointment Multiple
- ;
- ; SET HELPERS
- ;
- S PAT0=$G(^DPT(DFN,0))
- S PAM0=$G(^DPT(DFN,"S",ADT,0)) I PAM0'="" D
- .S CLIEN=$P($G(PAM0),U,1) I CLIEN'="" D
- ..S HLF0=$G(^SC(CLIEN,0))
- ..S HLAPIEN=+$$FIND^SDAM2(DFN,ADT,CLIEN) I HLAPIEN'="" D
- ...S HLAP0=$G(^SC(CLIEN,"S",ADT,1,HLAPIEN,0))
- Q
- ;
- GETDEM(RET,DFN,ADT,SDAPPTIEN) ;
- ; REQUIRE DFN AND APPOINTMENT DATE TIME
- Q:'$G(DFN)
- Q:'$G(ADT)
- S SDAPPTIEN=$G(SDAPPTIEN)
- S SDRET=$$SDEXPST(.SDRET,DFN,ADT,SDAPPTIEN)
- I +SDRET=-1 D Q RET
- . S RET="-1^The detail for the selected record is no longer available in VistA. Select the more recent record for Expanded Entry."
- ;
- S ADT=+ADT ;strip off extra zeros on time pwc SD*5.3*694
- D INIT
- ;
- ; INITIALIZE VARIABLES
- S (PATN,SSN,LAB,XRAY,EKG,PCODE,POV,ATIEN)=""
- S (PAMAT,CCODE,COLL,CLN,LOA,OTH,ECODE,EGIL,PAMSC)=""
- S (ENROLC,STAT,OCODE)=""
- N TIMEZONE
- N APPTDATA,PATCMNTS,COUNT
- ;
- ;PATN=Patient Name - Patient File [0,1]
- ;SSN=Formatted Social Security Number
- ;STAT=Status Patient Appointment Multiple - CURRENT STATUS (2.98,100)
- ;LAB=Date/Time of Labs - PATIENT/APPOINTMENT MULTIPLE [0,3]
- ;XRAY=Date/Time of x-ray - PATIENT/APPOINTMENT MULTIPLE [0,4]
- ;EKG=Date/Time of EKG - PATIENT/APPOINTMENT MULTIPLE [0,5]
- ;PCODE=Purpose of Visit Code - PATIENT/APPOINTMENT MULTIPLE [0,7]
- ;POV=Purpose of Visit
- ;ATIEN=Appointment Type IEN - PATIENT/APPOINTMENT MULTIPLE [0,16]
- ;PAMAT=Patient Appointment Multiple Appointment Type
- ;CCODE=Collateral Code - PATIENT/APPOINTMENT MULTIPLE [0,11]
- ;COLL=Collateral Yes or No
- ;CLN=Clinic Name - Hospital Location File [0,1]
- ;LOA=Length of Appointment - Hospital Location Appointment Multiple [0,2]
- ;ECODE=Eligibility Code - Hospital Location Appointment Multiple [0,10]
- ;EGIL=Eligibility of Appointment
- ;OCODE=Overbook Code - Hospital Location Appointment Multiple [QB]
- ;OVB=Overbook
- ;PATEN0=Patient Enrollment Clinic - Patient File Enrollment Clinic Multiple [B]
- ;ENROLC=Enrolled in Clinic Yes/No
- ;ERCNUM=Enrolled Clinic Number
- ;LPNUM=Loop Number
- ;
- ; -PATIENT FILE GLOBAL LOCATION 0
- I PAT0'="" D
- .S PATN=$P($G(PAT0),U,1)
- .S SSN=$$LAST4SSN^SDESINPUTVALUTL(DFN)
- ;
- ; -PATIENT/APPOINTMENT MULTIPLE GLOBAL LOCATION 0
- I PAM0'="" D
- .S STAT=$$STATUS^SDAM1(DFN,ADT,CLIEN,PAM0) I STAT'="" D
- ..S STAT=$P(STAT,";",2)
- .S LAB=$P($G(PAM0),U,3)
- .S XRAY=$P($G(PAM0),U,4)
- .S EKG=$P($G(PAM0),U,5)
- .S PCODE=$P($G(PAM0),U,7) I PCODE'="" D
- ..S POV=$S(PCODE=1:"C&P",PCODE=2:"10-10",PCODE=3:"SCHEDULED",PCODE=4:"UNSCHEDULED",1:"UNKNOWN")
- .S ATIEN=$P($G(PAM0),U,16) I ATIEN'="" D
- ..S PAMAT=$$GET1^DIQ(409.1,ATIEN,.01)
- .S CCODE=$P($G(PAM0),U,11)
- .S COLL="No" I CCODE=1 S COLL="Yes"
- ;
- ; -HOSPITAL LOCATION FILE GLOBAL LOCATION 0
- I HLF0'="" D
- .S CLN=$P($G(HLF0),U,1)
- ;
- ; -HOSPITAL LOCATION/APPOINTMENT/PATIENT MULTIPLE GLOBAL LOCATION 0
- I HLAP0'="" D
- .S LOA=+$P($G(HLAP0),U,2)
- .S OTH=$P($G(HLAP0),U,4)
- .S ECODE=$P($G(HLAP0),U,10) I ECODE'="" D
- ..S EGIL=$$GET1^DIQ(8,ECODE,.01)
- .I ECODE="" S EGIL=$P($G(^DIC(8,+$G(^DPT(DFN,.36)),0)),U)
- ;
- ; -HOSPITAL LOCATION/APPOINTMENT/PATIENT MULTIPLE GLOBAL LOCATION OB
- I HLAPIEN'="" S OCODE=$G(^SC(CLIEN,"S",ADT,1,HLAPIEN,"OB")) ; pwc added check for HLAPIEN SD*5.3*694
- S OVB="" I OCODE="O" S OVB="OVERBOOK"
- ;
- ; -PATIENT FILE ENROLLMENT CLINIC MULTIPLE
- S ENROLC="No"
- S LPNUM=0 F S LPNUM=$O(^DPT(DFN,"DE",LPNUM)) Q:LPNUM="" D
- .S ERCNUM=$P($G(^DPT(DFN,"DE",LPNUM,0)),"^",1)
- .Q:ERCNUM'=CLIEN
- .I $P($G(^DPT(DFN,"DE",LPNUM,0)),"^",2)="" D
- ..S ENROLC="Yes"
- ..Q
- ;
- ; -CONVERT DATES TO EXTERNAL
- ;
- ; Change date/time conversion so midnight is handled properly. wtc 694 5/7/18
- ;
- ;S Y=ADT D D^DIQ S ADT=Y
- S ADT=$$FMTONET^SDECDATE(ADT) ;
- ;I LAB'="" S Y=LAB D D^DIQ S LAB=Y
- I LAB'="" S LAB=$$FMTONET^SDECDATE(LAB) ;
- ;I XRAY'="" S Y=XRAY D D^DIQ S XRAY=Y
- I XRAY'="" S XRAY=$$FMTONET^SDECDATE(XRAY) ;
- ;I EKG'="" S Y=EKG D D^DIQ S EKG=Y
- I EKG'="" S EKG=$$FMTONET^SDECDATE(EKG) ;
- ;
- S TIMEZONE=$$TIMEZONEDATA^SDESUTIL($G(CLIEN)),TIMEZONE=$P($G(TIMEZONE),U)
- ;
- ;ANU
- D GETPATCOMMENTS^SDESAPPTDATA(.APPTDATA,SDAPPTIEN)
- S COUNT=1
- S PATCMNTS=APPTDATA("PatientComments",1)
- F S COUNT=$O(APPTDATA("PatientComments",COUNT)) Q:'COUNT D
- .S PATCMNTS=PATCMNTS_U_APPTDATA("PatientComments",COUNT)
- ;
- S RET=PATN_U_CLN_U_SSN_U_ADT_U_STAT_U_POV_U_LOA_U_PAMAT_U_LAB_U_EGIL_U_XRAY_U_OVB_U_EKG_U_COLL_U_OTH_U_ENROLC_U_TIMEZONE_U_$G(PATCMNTS)_U
- ;
- D EXIT
- Q
- ;
- SDEXPST(SDRET,DFN,ADT,SDAPPTIEN) ;
- N SDAPPT,SDRTN,SDNEXTIEN,SDCAN
- S SDRTN="" ; Appt can be expanded
- S SDAPPT="",ADT=+ADT
- F S SDAPPT=$O(^SDEC(409.84,"APTDT",DFN,ADT,SDAPPT)) Q:'SDAPPT D Q:SDRTN'=""
- . Q:SDAPPT'=SDAPPTIEN
- . S SDCAN=($$GET1^DIQ(409.84,SDAPPT,.12,"I")'="")
- . S SDNEXTIEN=$O(^SDEC(409.84,"APTDT",DFN,ADT,SDAPPT))
- . ; Current Appt is cancelled and there is another APPT
- . I SDCAN,SDNEXTIEN S SDRTN=-1 Q
- . ; Current Appt is cancelled & no other Appt
- . I SDCAN,'SDNEXTIEN S SDRTN=0 Q
- . ; Current Appt is NOT cancelled so there can't be other Appt for same Date/Time
- . I 'SDCAN,'SDNEXTIEN S SDRTN=0 Q
- S SDRET=SDRTN
- Q SDRET
- ;
- GETEVT(RET,DFN,ADT) ;
- ; REQUIRE DFN AND APPOINTMENT DATE TIME
- Q:'$G(DFN)
- Q:'$G(ADT)
- ;
- S ADT=+ADT ;strip off extra zeros on time pwc SD*5.3*694
- D INIT
- ;
- ; INITIALIZE VARIABLES
- S (AMUIEN,AMU,AMD,HLAPC,CID,CIUIEN,CIUN,COD,COUIEN,CREAC)=""
- S (COUN,COED,NCD,NCUIEN,NCUN,CANREA,RBD,CANREM,AMUN,HLPAC)=""
- ;
- ;AMUIEN=Appointment Made User IEN - Hospital Location Appointment Multiple [0,6]
- ;AMUN=Appointment Made User Name - New Person File Field .01
- ;AMD=Appointment Made Date - Hospital Location Appointment Multiple [0,7]
- ;HLAPC=Global location C from Hospital Location Appointment Multiple
- ;CID=Check-in Date - Hospital Location Appointment Multiple [C,1]
- ;CIUIEN=Check-in User IEN - Hospital Location Appointment Multiple [C,2]
- ;CIUN=Check-in User Name - New Person File Field .01
- ;COD=Check Out Date - Hospital Location Appointment Multiple [C,3]
- ;COUIEN=Check Out User IEN - Hospital Location Appointment Multiple [C,4]
- ;COUN=Check Out User Name - New Person File Field .01
- ;COED=Check Out Entered Date - Hospital Location Appointment Multiple [C,3]
- ;NCD=No-Show/Cancel Date - PATIENT/APPOINTMENT MULTIPLE [0,14]
- ;NCUIEN=No-Show/Cancel User IEN - PATIENT/APPOINTMENT MULTIPLE [0,12]
- ;NCUN=No-Show/Cancel User Name - New Person File Field .01
- ;CREAC=Cancel Reason Code - PATIENT/APPOINTMENT MULTIPLE [0,15]
- ;CANREA=Cancel Reason - CANCELLATION REASONS [0,1]
- ;RBD=Rebook Date - PATIENT/APPOINTMENT MULTIPLE [0,10]
- ;CANREM=Cancel Remarks - PATIENT/APPOINTMENT MULTIPLE [R,1]
- ;
- ; -HOSPITAL LOCATION/APPOINTMENT/PATIENT MULTIPLE GLOBAL LOCATION 0
- I HLAP0'="" D
- .S AMUIEN=$P($G(HLAP0),U,6) I AMUIEN'="" D
- ..S AMUN=$$GET1^DIQ(200,AMUIEN,.01,"E")
- .S AMD=$P($G(HLAP0),U,7)
- ;
- ; -HOSPITAL LOCATION/APPOINTMENT/PATIENT MULTIPLE GLOBAL LOCATION C
- I HLAPIEN'="" S HLAPC=$G(^SC(CLIEN,"S",ADT,1,HLAPIEN,"C")) I HLAPC'="" D
- .S CID=$P($G(HLAPC),U,1) I CID'="" D
- ..S CIUIEN=$P($G(HLAPC),U,2) I CIUIEN'="" D
- ...S CIUN=$$GET1^DIQ(200,CIUIEN,.01,"E")
- .S COD=$P($G(HLAPC),U,3) I COD'="" D
- ..S COUIEN=$P($G(HLAPC),U,4) I COUIEN'="" D
- ...S COUN=$$GET1^DIQ(200,COUIEN,.01,"E")
- ..S COED=$P($G(HLAPC),U,6)
- ;
- ; -PATIENT/APPOINTMENT MULTIPLE GLOBAL LOCATION 0
- I PAM0'="" D
- .S NCD=$P($G(PAM0),U,14) I NCD'="" D
- ..S NCUIEN=$P($G(PAM0),U,12) I NCUIEN'="" D
- ...S NCUN=$$GET1^DIQ(200,NCUIEN,.01,"E")
- .S CREAC=$P($G(PAM0),U,15) I NCUIEN'="" D
- ..S CANREA=$$GET1^DIQ(409.2,CREAC,.01)
- .S RBD=$P($G(PAM0),U,10)
- I AMUN="" D
- .S AMUIEN=$P($G(PAM0),U,18) I AMUIEN'="" D
- ..S AMUN=$$GET1^DIQ(200,AMUIEN,.01,"E")
- I AMD="" D
- .S AMD=$P($G(PAM0),U,19)
- ;
- ; -PATIENT/APPOINTMENT MULTIPLE GLOBAL LOCATION R
- S PAMR=$G(^DPT(DFN,"S",ADT,"R")) I PAMR'="" D
- .S CANREM=$P($G(PAMR),U,1)
- ;
- ; -CONVERT DATES TO EXTERNAL
- ;
- ; Change date/time conversion so midnight is handled properly. wtc 694 5/7/18
- ;
- ;I AMD'="" S Y=AMD D D^DIQ S AMD=Y
- I AMD'="" S AMD=$$FMTONET^SDECDATE(AMD) ;
- ;I CID'="" S Y=CID D D^DIQ S CID=Y
- I CID'="" S CID=$$FMTONET^SDECDATE(CID) ;
- ;I COD'="" S Y=COD D D^DIQ S COD=Y
- I COD'="" S COD=$$FMTONET^SDECDATE(COD) ;
- ;I COED'="" S Y=COED D D^DIQ S COED=Y
- I COED'="" S COED=$$FMTONET^SDECDATE(COED) ;
- ;I NCD'="" S Y=NCD D D^DIQ S NCD=Y
- I NCD'="" S NCD=$$FMTONET^SDECDATE(NCD) ;
- ;
- S RET=AMD_U_AMUN_U_CID_U_CIUN_U_COD_U_COUN_U_COED_U_NCD_U_NCUN_U_CANREA_U_CANREM_U_RBD
- ;
- D EXIT
- Q
- ;
- GETWT(RET,DFN,ADT) ;
- ; REQUIRE DFN AND APPOINTMENT DATE TIME
- Q:'$G(DFN)
- Q:'$G(ADT)
- ;
- S ADT=+ADT ;strip off extra zeros on time pwc SD*5.3*694
- D INIT
- ;
- S (REQTC,REQT,NATCODE,NAT,AMD,PAM1,CID,FUVCODE,FUV,CWT1,CWT2)=""
- ;
- ;REQTC=Request Type Code - Patient File Appointment Multiple [0,25]
- ;REQT=Request Type
- ;NATCODE=Next Available Type Code - Patient File Appointment Multiple [0,26]
- ;NAT=Next Available Type
- ;AMD=Appointment Made Date - Patient File Appointment Multiple [0,19]
- ;PAM1=Global Location 1 of the Patient File Appointment Multiple
- ;CID=Clinic Indicated Date/Preferred Date - Patient File Appointment Multiple [1,1]
- ;FUVCODE=Follow-Up Visit Code 1=Yes 0=No - Patient File Appointment Multiple [1,2]
- ;FUV=Follow-Up Visit
- ;CWT1=Clinic Wait Time 1
- ;CWT2=Clinic Wait Time 2
- ;
- ; -PATIENT/APPOINTMENT MULTIPLE GLOBAL LOCATION 0
- I PAM0'="" D
- .S REQTC=$P($G(PAM0),U,25) I REQTC'="" D
- ..I REQTC="N" S REQT="'NEXT AVAILABLE' APPT."
- ..I REQTC="C" S REQT="OTHER THAN 'NEXT AVA.' (CLINICIAN REQ.)"
- ..I REQTC="P" S REQT="OTHER THAN 'NEXT AVA.' (PATIENT REQ.)"
- ..I REQTC="W" S REQT="WALKIN APPT."
- ..I REQTC="M" S REQT="MULTIPLE APPT. BOOKING"
- ..I REQTC="A" S REQT="AUTO REBOOK"
- ..I REQTC="O" S REQT="OTHER THAN 'NEXT AVA.' APPT."
- .S NATCODE=$P($G(PAM0),U,26) I NATCODE'="" D
- ..I NATCODE=0 S NAT="NOT INDICATED TO BE A 'NEXT AVA.' APPT."
- ..I NATCODE=1 S NAT="'NEXT AVA.' APPT. INDICATED BY USER"
- ..I NATCODE=3 S NAT="'NEXT AVA.' APPT. INDICATED BY CALCULATION"
- ..I NATCODE=4 S NAT="'NEXT AVA.' APPT. INDICATED BY USER & CALCULATION"
- .S AMD=$P($G(PAM0),U,19)
- ;
- ; -PATIENT/APPOINTMENT MULTIPLE GLOBAL LOCATION 1
- S PAM1=$G(^DPT(DFN,"S",ADT,1)) I PAM1'="" D
- .S CID=$P($G(PAM1),U,1)
- .S FUVCODE=$P($G(PAM1),U,2)
- .S FUV="No" I FUVCODE=1 S FUV="Yes"
- ;
- ; CALULATE WAIT TIMES
- S (X,X1,X2)=""
- I AMD'="" D
- .S X1=ADT S X2=AMD D ^%DTC S CWT1=X
- I CID'="" D
- .S X1=ADT S X2=CID D ^%DTC S CWT2=X
- ;
- ; -CONVERT DATES TO EXTERNAL
- ;
- ; Change date/time conversion so midnight is handled properly. wtc 694 5/7/18
- ;
- ;I CID'="" S Y=CID D D^DIQ S CID=Y
- I CID'="" S CID=$$FMTONET^SDECDATE(CID) ;
- ;
- S RET=REQT_U_NAT_U_CID_U_FUV_U_CWT1_U_CWT2
- ;
- D EXIT
- Q
- ;
- ;STATUS, LAST ADMIT/LODGER DATE, LAST DISCHARGE/LODGER DATE
- INP ;
- Q:'$G(DFN)
- ;
- S (LADMT,LDIS,DNUM,STAT,SDST,SDSTA,REN,A)=""
- I '$D(^DGPM("C",DFN)) S LSTAT="NO INPT./LOD. ACT." Q
- ;
- S VAIP("D")="L",VAIP("L")="" D INP^DGPMV10
- S A=$S("^3^5^"[("^"_+DGPMVI(2)_"^"):0,1:+DGPMVI(2)),SDST=$S('A:"IN",1:"")_"ACTIVE ",SDSTA=$S("^4^5^"[("^"_+DGPMVI(2)_"^"):"LODGER",1:"INPATIENT")
- S STAT="" S STAT=SDST_SDSTA
- S LADMT="" S LADMT=$P($G(DGPMVI(13,1)),"^",2)
- S DNUM="" S DNUM=$G(DGPMV1(17)) I DNUM'="" D
- .S LDIS="" S LDIS=$$GET1^DIQ(405,DNUM,.01)
- Q
- GETPTIN(RET,DFN,ADT) ;
- ;REQUIRE DFN AND APPOINTMENT DATE TIME
- Q:'$G(DFN)
- Q:'$G(ADT)
- ;
- S ADT=+ADT ;strip off extra zeros on time pwc SD*5.3*694
- D INIT
- ;
- S (DOB,SSN,SEX,MARSIEN,MARS,RELGP,PAT36,PELIG,POS,SADDR1,SWASIAC)=""
- S (SADDR2,SADDR3,CITY,STATEN,STATE,CNTY,ADDR,PHN,CPHN,PGER,EMAIL,RADEXC)=""
- S (RADEX,STAT,POW,LADMT,AOEXLC,AOEXL,LDIS,CMBTVC,CMBTV,CMBTVED,PROJ112)=""
- S (PROCODE,SWASIA,PAT36,PAT11,PAT13,PAT36,PAT52,PAT321,PAT322,POWCODE)=""
- S (RELGPN,PELIGN,POSN)=""
- ;
- ;DOB=Date Of Birth - Patient File [0,3]
- ;SSN=Formatted Social Security Number
- ;SEX=Male or Female - Patient File [0,2]
- ;MARSIEN=Marital Status IEN - Patient File [0,5]
- ;MARS=Marital Status - Marital Status File (11) Field .01
- ;RELGPN=Religious Preference IEN - Patient File [0,8]
- ;RELGP=Religious Preference - file 13 field .01 (Name)
- ;PELIGN=Primary Eligibility IEN - Patient File [.36,1]
- ;PELIG=Primary Eligibility - File 8 field .01 (name)
- ;POSN=Period of Service IEN
- ;POS=Period of Service - File 21 Field .01 (Name)
- ;SADDR1=Street Address 1 - Patient File [.11,1]
- ;SADDR2=Street Address 2 - Patient File [.11,2]
- ;SADDR3=Street Address 2 - Patient File [.11,3]
- ;CITY=City - Patient File [.11,4]
- ;STATEN=State IEN - Patient File [.11,5]
- ;STATE=State - State File (5) Field .01
- ;CNTYIEN=Country IEN - Patient File [.11,10]
- ;CNTY=Country - Country Code File (779.004) Field .01
- ;ADDR=Address
- ;PHN=Phone Number - Patient File [.13,1]
- ;CPHN=Cell Phone Number - Patient File [.13,4]
- ;PGER=Pager Number - Patient File [.13,5]
- ;EMAIL=Email Address - Patient File [.13,3]
- ;RADEXC=Radiation Exposure CODE Y=Yes N=No U=Unknown - Patient File [.321,3]
- ;RADEX=Radiation Exposure
- ;
- ;STAT=Status ???
- ;
- ;POWCODE=Prisoner Of War CODE Y=Yes N=No U=Unknown - Patient File [.52,5]
- ;POW=Prisoner Of War
- ;
- ;LADMT=Last Admit/Lodger Date ???
- ;
- ;AOEXLC=Agent Orange Exposure Location CODE K=Korean DMZ V=Vietnam O=Other - Patient File [.321,13]
- ;AOEXL=Agent Orange Exposure Location
- ;
- ;LDIS=Last Discharge/Lodger Date ???
- ;
- ;CMBTVC=Combat Veteran CODE Y=Yes N=No - Patient File [.52,11]
- ;CMBTV=Combat Veteran
- ;CMBTVED=Combat Veteran End Date - Patient File [.52,14]
- ;PROCODE=Project 112/SHAD CODE 0=No 1=Yes - Patient File [.321,15]
- ;PROJ112=Project 112/SHAD
- ;SWASIAC=SW Asia Conditions Code Y=Yes N=No U=Unknown - Patient File [.322,13]
- ;SWASIA=SW Asia Conditions
- ;
- ; -PATIENT FILE GLOBAL LOCATION 0
- I PAT0'="" D
- .S DOB=$P($G(PAT0),U,3)
- .S SSN=$$LAST4SSN^SDESINPUTVALUTL(DFN)
- .S SEXCODE=$P($G(PAT0),U,2) I SEXCODE'="" D
- ..I SEXCODE="M" S SEX="Male"
- ..I SEXCODE="F" S SEX="Female"
- .S MARSIEN=$P($G(PAT0),U,5) I MARSIEN'="" D
- ..S MARS=$$GET1^DIQ(11,MARSIEN,.01)
- .S RELGPN=$P($G(PAT0),U,8) I RELGPN'="" D
- ..S RELGP=$$GET1^DIQ(13,RELGPN,.01)
- ;
- ; -PATIENT FILE GLOBAL LOCATION .11
- S PAT11=$G(^DPT(DFN,.11)) I PAT11'="" D
- .S SADDR1=$P($G(PAT11),U,1)
- .S SADDR2=$P($G(PAT11),U,2)
- .S SADDR3=$P($G(PAT11),U,3)
- .S CITY=$P($G(PAT11),U,4)
- .S STATEN=$P($G(PAT11),U,5) I STATEN'="" D
- ..S STATE=$$GET1^DIQ(5,STATEN,.01)
- .S ZCODE=$P($G(PAT11),U,6)
- .S CNTYIEN=$P($G(PAT11),U,10) I CNTYIEN'="" D
- ..S CNTY=$$GET1^DIQ(779.004,CNTYIEN,.01)
- .S SADDR=SADDR1 I SADDR2'="" D
- ..S SADDR=SADDR1_" "_SADDR2 I SADDR3'="" D
- ...S SADDR=SADDR1_" "_SADDR2_" "_SADDR3
- .S ADDR=SADDR_" "_CITY_", "_STATE_" "_ZCODE_" "_CNTY
- ;
- ; -PATIENT FILE GLOBAL LOCATION .13
- S PAT13=$G(^DPT(DFN,.13)) I PAT13'="" D
- .S PHN=$P($G(PAT13),U,1)
- .S CPHN=$P($G(PAT13),U,4)
- .S PGER=$P($G(PAT13),U,5)
- .S EMAIL=$P($G(PAT13),U,3)
- ;
- ; -PATIENT FILE GLOBAL LOCATION .36
- S PAT36=$G(^DPT(DFN,.36)) I PAT36'="" D
- .S PELIGN=$P($G(PAT36),U,1) I PELIGN'="" D
- ..S PELIG=$$GET1^DIQ(8,PELIGN,.01)
- ;
- ; -PATIENT FILE GLOBAL LOCATION .52
- S PAT52=$G(^DPT(DFN,.52)) I PAT52'="" D
- .S POWCODE=$P($G(PAT52),U,5) I POWCODE'="" D
- ..I POWCODE="Y" S POW="Yes"
- ..I POWCODE="N" S POW="No"
- ..I POWCODE="U" S POW="Unknown"
- .S CMBTVC=$P($G(PAT52),U,11) I CMBTVC'="" D
- ..S CMBTV="No"
- ..I CMBTVC="Y" S CMBTV="Yes"
- .S CMBTVED=$P($G(PAT52),U,14) I CMBTV="No" D
- ..S CMBTVED="N/A"
- ;
- ; -PATIENT FILE GLOBAL LOCATION .321
- S PAT321=$G(^DPT(DFN,.52)) I PAT321'="" D
- .S RADEXC=$P($G(PAT321),U,3) I RADEXC'="" D
- ..I RADEXC="Y" S RADEX="Yes"
- ..I RADEXC="N" S RADEX="No"
- ..I RADEXC="U" S RADEX="Unknown"
- .S AOEXLC=$P($G(PAT321),U,13) I AOEXLC'="" D
- ..I AOEXLC="K" S AOEXL="Korean DMZ"
- ..I AOEXLC="V" S AOEXL="Vietnam"
- ..I AOEXLC="O" S AOEXL="Other (Not Korean DMZ or Vietnam)"
- .S PROCODE=$P($G(PAT321),U,15) I PROCODE'="" D
- ..I PROCODE=2 S PROJ112="No"
- ..I PROCODE=1 S PROJ112="Yes"
- ;
- ; -PATIENT FILE GLOBAL LOCATION .322
- S PAT322=$G(^DPT(DFN,.52)) I PAT322'="" D
- .S SWASIAC=$P($G(PAT322),U,13) I SWASIAC'="" D
- ..I SWASIAC="Y" S SWASIA="Yes"
- ..I SWASIAC="N" S SWASIA="No"
- ..I SWASIAC="U" S SWASIA="Unknown"
- ;
- ; -CONVERT DATES TO EXTERNAL
- I DOB'="" S Y=DOB D D^DIQ S DOB=Y
- ;
- ; -PERIOD OF SERVICE
- S (POSN,POS)="" S POSN=$$GET1^DIQ(2,DFN_",",.323,"I") I POSN'="" S POS=$$GET1^DIQ(21,POSN,.01,"E")
- ;
- ; -GET STAT, LADMT, LDIS
- D INP
- ;
- S RET=DOB_U_SSN_U_SEX_U_MARS_U_RELGP_U_PELIG_U_POS_U_ADDR_U_PHN_U_CPHN_U_PGER_U_EMAIL_U_RADEX_U_STAT_U_POW_U_LADMT_U_AOEXL_U_LDIS_U_CMBTV_U_CMBTVED_U_PROJ112_U_SWASIA
- ;
- D EXIT
- Q
- ;
- EXIT ;
- K PAT0,PAM0,CLIEN,HLF0,HLAPIEN,HLAP0,PAMS,PCODE,ATIEN,CCODE,ECODE,PAMSC
- K AMUIEN,AMU,HLAPC,CIUIEN,COUIEN,NCUIEN,PAT36,SADDR1,SWASIAC,SADDR2,SADDR3
- K CITY,STATEN,STATE,CNTY,RADEXC,AOEXLC,CMBTVC,PROCODE,PAT36,PAT11,PAT13,PAT52
- K PAT321,PAT322,ENROLC
- Q
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HSDECEPT 17682 printed Feb 19, 2025@00:18:29 Page 2
- SDECEPT ;SPFO/RT,MGD,LAB,ANU - SCHEDULING ENHANCEMENTS VSE EP API ;JUN 08,2023
- +1 ;;5.3;Scheduling;**669,671,694,794,809,813,823,846**;Aug 13 1993;Build 12
- +2 ;;Per VHA Directive 6402, this routine should not be modified
- +3 ;
- +4 ;The API provides Extended Profile Appt info the VS GUI.
- +5 ;INPUT - DFN required
- +6 ; APP appointment date/time required
- +7 QUIT
- +8 ;
- INIT ;
- +1 SET (PAT0,PAM0,CLIEN,HLF0,HLAPIEN,HLAP0)=""
- +2 ;
- +3 ; PAT0=Global location 0 from Patient file
- +4 ; PAM0=Global location 0 from Patient Appointment Multiple
- +5 ; CLIEN=Clinic IEN
- +6 ; HLF0=Global location 0 from Hospital Location File
- +7 ; HLAPIEN=Hospital Location Appointment Multiple IEN
- +8 ; HLAP0=Global location 0 from Hospital Appointment Multiple
- +9 ;
- +10 ; SET HELPERS
- +11 ;
- +12 SET PAT0=$GET(^DPT(DFN,0))
- +13 SET PAM0=$GET(^DPT(DFN,"S",ADT,0))
- IF PAM0'=""
- Begin DoDot:1
- +14 SET CLIEN=$PIECE($GET(PAM0),U,1)
- IF CLIEN'=""
- Begin DoDot:2
- +15 SET HLF0=$GET(^SC(CLIEN,0))
- +16 SET HLAPIEN=+$$FIND^SDAM2(DFN,ADT,CLIEN)
- IF HLAPIEN'=""
- Begin DoDot:3
- +17 SET HLAP0=$GET(^SC(CLIEN,"S",ADT,1,HLAPIEN,0))
- End DoDot:3
- End DoDot:2
- End DoDot:1
- +18 QUIT
- +19 ;
- GETDEM(RET,DFN,ADT,SDAPPTIEN) ;
- +1 ; REQUIRE DFN AND APPOINTMENT DATE TIME
- +2 if '$GET(DFN)
- QUIT
- +3 if '$GET(ADT)
- QUIT
- +4 SET SDAPPTIEN=$GET(SDAPPTIEN)
- +5 SET SDRET=$$SDEXPST(.SDRET,DFN,ADT,SDAPPTIEN)
- +6 IF +SDRET=-1
- Begin DoDot:1
- +7 SET RET="-1^The detail for the selected record is no longer available in VistA. Select the more recent record for Expanded Entry."
- End DoDot:1
- QUIT RET
- +8 ;
- +9 ;strip off extra zeros on time pwc SD*5.3*694
- SET ADT=+ADT
- +10 DO INIT
- +11 ;
- +12 ; INITIALIZE VARIABLES
- +13 SET (PATN,SSN,LAB,XRAY,EKG,PCODE,POV,ATIEN)=""
- +14 SET (PAMAT,CCODE,COLL,CLN,LOA,OTH,ECODE,EGIL,PAMSC)=""
- +15 SET (ENROLC,STAT,OCODE)=""
- +16 NEW TIMEZONE
- +17 NEW APPTDATA,PATCMNTS,COUNT
- +18 ;
- +19 ;PATN=Patient Name - Patient File [0,1]
- +20 ;SSN=Formatted Social Security Number
- +21 ;STAT=Status Patient Appointment Multiple - CURRENT STATUS (2.98,100)
- +22 ;LAB=Date/Time of Labs - PATIENT/APPOINTMENT MULTIPLE [0,3]
- +23 ;XRAY=Date/Time of x-ray - PATIENT/APPOINTMENT MULTIPLE [0,4]
- +24 ;EKG=Date/Time of EKG - PATIENT/APPOINTMENT MULTIPLE [0,5]
- +25 ;PCODE=Purpose of Visit Code - PATIENT/APPOINTMENT MULTIPLE [0,7]
- +26 ;POV=Purpose of Visit
- +27 ;ATIEN=Appointment Type IEN - PATIENT/APPOINTMENT MULTIPLE [0,16]
- +28 ;PAMAT=Patient Appointment Multiple Appointment Type
- +29 ;CCODE=Collateral Code - PATIENT/APPOINTMENT MULTIPLE [0,11]
- +30 ;COLL=Collateral Yes or No
- +31 ;CLN=Clinic Name - Hospital Location File [0,1]
- +32 ;LOA=Length of Appointment - Hospital Location Appointment Multiple [0,2]
- +33 ;ECODE=Eligibility Code - Hospital Location Appointment Multiple [0,10]
- +34 ;EGIL=Eligibility of Appointment
- +35 ;OCODE=Overbook Code - Hospital Location Appointment Multiple [QB]
- +36 ;OVB=Overbook
- +37 ;PATEN0=Patient Enrollment Clinic - Patient File Enrollment Clinic Multiple [B]
- +38 ;ENROLC=Enrolled in Clinic Yes/No
- +39 ;ERCNUM=Enrolled Clinic Number
- +40 ;LPNUM=Loop Number
- +41 ;
- +42 ; -PATIENT FILE GLOBAL LOCATION 0
- +43 IF PAT0'=""
- Begin DoDot:1
- +44 SET PATN=$PIECE($GET(PAT0),U,1)
- +45 SET SSN=$$LAST4SSN^SDESINPUTVALUTL(DFN)
- End DoDot:1
- +46 ;
- +47 ; -PATIENT/APPOINTMENT MULTIPLE GLOBAL LOCATION 0
- +48 IF PAM0'=""
- Begin DoDot:1
- +49 SET STAT=$$STATUS^SDAM1(DFN,ADT,CLIEN,PAM0)
- IF STAT'=""
- Begin DoDot:2
- +50 SET STAT=$PIECE(STAT,";",2)
- End DoDot:2
- +51 SET LAB=$PIECE($GET(PAM0),U,3)
- +52 SET XRAY=$PIECE($GET(PAM0),U,4)
- +53 SET EKG=$PIECE($GET(PAM0),U,5)
- +54 SET PCODE=$PIECE($GET(PAM0),U,7)
- IF PCODE'=""
- Begin DoDot:2
- +55 SET POV=$SELECT(PCODE=1:"C&P",PCODE=2:"10-10",PCODE=3:"SCHEDULED",PCODE=4:"UNSCHEDULED",1:"UNKNOWN")
- End DoDot:2
- +56 SET ATIEN=$PIECE($GET(PAM0),U,16)
- IF ATIEN'=""
- Begin DoDot:2
- +57 SET PAMAT=$$GET1^DIQ(409.1,ATIEN,.01)
- End DoDot:2
- +58 SET CCODE=$PIECE($GET(PAM0),U,11)
- +59 SET COLL="No"
- IF CCODE=1
- SET COLL="Yes"
- End DoDot:1
- +60 ;
- +61 ; -HOSPITAL LOCATION FILE GLOBAL LOCATION 0
- +62 IF HLF0'=""
- Begin DoDot:1
- +63 SET CLN=$PIECE($GET(HLF0),U,1)
- End DoDot:1
- +64 ;
- +65 ; -HOSPITAL LOCATION/APPOINTMENT/PATIENT MULTIPLE GLOBAL LOCATION 0
- +66 IF HLAP0'=""
- Begin DoDot:1
- +67 SET LOA=+$PIECE($GET(HLAP0),U,2)
- +68 SET OTH=$PIECE($GET(HLAP0),U,4)
- +69 SET ECODE=$PIECE($GET(HLAP0),U,10)
- IF ECODE'=""
- Begin DoDot:2
- +70 SET EGIL=$$GET1^DIQ(8,ECODE,.01)
- End DoDot:2
- +71 IF ECODE=""
- SET EGIL=$PIECE($GET(^DIC(8,+$GET(^DPT(DFN,.36)),0)),U)
- End DoDot:1
- +72 ;
- +73 ; -HOSPITAL LOCATION/APPOINTMENT/PATIENT MULTIPLE GLOBAL LOCATION OB
- +74 ; pwc added check for HLAPIEN SD*5.3*694
- IF HLAPIEN'=""
- SET OCODE=$GET(^SC(CLIEN,"S",ADT,1,HLAPIEN,"OB"))
- +75 SET OVB=""
- IF OCODE="O"
- SET OVB="OVERBOOK"
- +76 ;
- +77 ; -PATIENT FILE ENROLLMENT CLINIC MULTIPLE
- +78 SET ENROLC="No"
- +79 SET LPNUM=0
- FOR
- SET LPNUM=$ORDER(^DPT(DFN,"DE",LPNUM))
- if LPNUM=""
- QUIT
- Begin DoDot:1
- +80 SET ERCNUM=$PIECE($GET(^DPT(DFN,"DE",LPNUM,0)),"^",1)
- +81 if ERCNUM'=CLIEN
- QUIT
- +82 IF $PIECE($GET(^DPT(DFN,"DE",LPNUM,0)),"^",2)=""
- Begin DoDot:2
- +83 SET ENROLC="Yes"
- +84 QUIT
- End DoDot:2
- End DoDot:1
- +85 ;
- +86 ; -CONVERT DATES TO EXTERNAL
- +87 ;
- +88 ; Change date/time conversion so midnight is handled properly. wtc 694 5/7/18
- +89 ;
- +90 ;S Y=ADT D D^DIQ S ADT=Y
- +91 ;
- SET ADT=$$FMTONET^SDECDATE(ADT)
- +92 ;I LAB'="" S Y=LAB D D^DIQ S LAB=Y
- +93 ;
- IF LAB'=""
- SET LAB=$$FMTONET^SDECDATE(LAB)
- +94 ;I XRAY'="" S Y=XRAY D D^DIQ S XRAY=Y
- +95 ;
- IF XRAY'=""
- SET XRAY=$$FMTONET^SDECDATE(XRAY)
- +96 ;I EKG'="" S Y=EKG D D^DIQ S EKG=Y
- +97 ;
- IF EKG'=""
- SET EKG=$$FMTONET^SDECDATE(EKG)
- +98 ;
- +99 SET TIMEZONE=$$TIMEZONEDATA^SDESUTIL($GET(CLIEN))
- SET TIMEZONE=$PIECE($GET(TIMEZONE),U)
- +100 ;
- +101 ;ANU
- +102 DO GETPATCOMMENTS^SDESAPPTDATA(.APPTDATA,SDAPPTIEN)
- +103 SET COUNT=1
- +104 SET PATCMNTS=APPTDATA("PatientComments",1)
- +105 FOR
- SET COUNT=$ORDER(APPTDATA("PatientComments",COUNT))
- if 'COUNT
- QUIT
- Begin DoDot:1
- +106 SET PATCMNTS=PATCMNTS_U_APPTDATA("PatientComments",COUNT)
- End DoDot:1
- +107 ;
- +108 SET RET=PATN_U_CLN_U_SSN_U_ADT_U_STAT_U_POV_U_LOA_U_PAMAT_U_LAB_U_EGIL_U_XRAY_U_OVB_U_EKG_U_COLL_U_OTH_U_ENROLC_U_TIMEZONE_U_$GET(PATCMNTS)_U
- +109 ;
- +110 DO EXIT
- +111 QUIT
- +112 ;
- SDEXPST(SDRET,DFN,ADT,SDAPPTIEN) ;
- +1 NEW SDAPPT,SDRTN,SDNEXTIEN,SDCAN
- +2 ; Appt can be expanded
- SET SDRTN=""
- +3 SET SDAPPT=""
- SET ADT=+ADT
- +4 FOR
- SET SDAPPT=$ORDER(^SDEC(409.84,"APTDT",DFN,ADT,SDAPPT))
- if 'SDAPPT
- QUIT
- Begin DoDot:1
- +5 if SDAPPT'=SDAPPTIEN
- QUIT
- +6 SET SDCAN=($$GET1^DIQ(409.84,SDAPPT,.12,"I")'="")
- +7 SET SDNEXTIEN=$ORDER(^SDEC(409.84,"APTDT",DFN,ADT,SDAPPT))
- +8 ; Current Appt is cancelled and there is another APPT
- +9 IF SDCAN
- IF SDNEXTIEN
- SET SDRTN=-1
- QUIT
- +10 ; Current Appt is cancelled & no other Appt
- +11 IF SDCAN
- IF 'SDNEXTIEN
- SET SDRTN=0
- QUIT
- +12 ; Current Appt is NOT cancelled so there can't be other Appt for same Date/Time
- +13 IF 'SDCAN
- IF 'SDNEXTIEN
- SET SDRTN=0
- QUIT
- End DoDot:1
- if SDRTN'=""
- QUIT
- +14 SET SDRET=SDRTN
- +15 QUIT SDRET
- +16 ;
- GETEVT(RET,DFN,ADT) ;
- +1 ; REQUIRE DFN AND APPOINTMENT DATE TIME
- +2 if '$GET(DFN)
- QUIT
- +3 if '$GET(ADT)
- QUIT
- +4 ;
- +5 ;strip off extra zeros on time pwc SD*5.3*694
- SET ADT=+ADT
- +6 DO INIT
- +7 ;
- +8 ; INITIALIZE VARIABLES
- +9 SET (AMUIEN,AMU,AMD,HLAPC,CID,CIUIEN,CIUN,COD,COUIEN,CREAC)=""
- +10 SET (COUN,COED,NCD,NCUIEN,NCUN,CANREA,RBD,CANREM,AMUN,HLPAC)=""
- +11 ;
- +12 ;AMUIEN=Appointment Made User IEN - Hospital Location Appointment Multiple [0,6]
- +13 ;AMUN=Appointment Made User Name - New Person File Field .01
- +14 ;AMD=Appointment Made Date - Hospital Location Appointment Multiple [0,7]
- +15 ;HLAPC=Global location C from Hospital Location Appointment Multiple
- +16 ;CID=Check-in Date - Hospital Location Appointment Multiple [C,1]
- +17 ;CIUIEN=Check-in User IEN - Hospital Location Appointment Multiple [C,2]
- +18 ;CIUN=Check-in User Name - New Person File Field .01
- +19 ;COD=Check Out Date - Hospital Location Appointment Multiple [C,3]
- +20 ;COUIEN=Check Out User IEN - Hospital Location Appointment Multiple [C,4]
- +21 ;COUN=Check Out User Name - New Person File Field .01
- +22 ;COED=Check Out Entered Date - Hospital Location Appointment Multiple [C,3]
- +23 ;NCD=No-Show/Cancel Date - PATIENT/APPOINTMENT MULTIPLE [0,14]
- +24 ;NCUIEN=No-Show/Cancel User IEN - PATIENT/APPOINTMENT MULTIPLE [0,12]
- +25 ;NCUN=No-Show/Cancel User Name - New Person File Field .01
- +26 ;CREAC=Cancel Reason Code - PATIENT/APPOINTMENT MULTIPLE [0,15]
- +27 ;CANREA=Cancel Reason - CANCELLATION REASONS [0,1]
- +28 ;RBD=Rebook Date - PATIENT/APPOINTMENT MULTIPLE [0,10]
- +29 ;CANREM=Cancel Remarks - PATIENT/APPOINTMENT MULTIPLE [R,1]
- +30 ;
- +31 ; -HOSPITAL LOCATION/APPOINTMENT/PATIENT MULTIPLE GLOBAL LOCATION 0
- +32 IF HLAP0'=""
- Begin DoDot:1
- +33 SET AMUIEN=$PIECE($GET(HLAP0),U,6)
- IF AMUIEN'=""
- Begin DoDot:2
- +34 SET AMUN=$$GET1^DIQ(200,AMUIEN,.01,"E")
- End DoDot:2
- +35 SET AMD=$PIECE($GET(HLAP0),U,7)
- End DoDot:1
- +36 ;
- +37 ; -HOSPITAL LOCATION/APPOINTMENT/PATIENT MULTIPLE GLOBAL LOCATION C
- +38 IF HLAPIEN'=""
- SET HLAPC=$GET(^SC(CLIEN,"S",ADT,1,HLAPIEN,"C"))
- IF HLAPC'=""
- Begin DoDot:1
- +39 SET CID=$PIECE($GET(HLAPC),U,1)
- IF CID'=""
- Begin DoDot:2
- +40 SET CIUIEN=$PIECE($GET(HLAPC),U,2)
- IF CIUIEN'=""
- Begin DoDot:3
- +41 SET CIUN=$$GET1^DIQ(200,CIUIEN,.01,"E")
- End DoDot:3
- End DoDot:2
- +42 SET COD=$PIECE($GET(HLAPC),U,3)
- IF COD'=""
- Begin DoDot:2
- +43 SET COUIEN=$PIECE($GET(HLAPC),U,4)
- IF COUIEN'=""
- Begin DoDot:3
- +44 SET COUN=$$GET1^DIQ(200,COUIEN,.01,"E")
- End DoDot:3
- +45 SET COED=$PIECE($GET(HLAPC),U,6)
- End DoDot:2
- End DoDot:1
- +46 ;
- +47 ; -PATIENT/APPOINTMENT MULTIPLE GLOBAL LOCATION 0
- +48 IF PAM0'=""
- Begin DoDot:1
- +49 SET NCD=$PIECE($GET(PAM0),U,14)
- IF NCD'=""
- Begin DoDot:2
- +50 SET NCUIEN=$PIECE($GET(PAM0),U,12)
- IF NCUIEN'=""
- Begin DoDot:3
- +51 SET NCUN=$$GET1^DIQ(200,NCUIEN,.01,"E")
- End DoDot:3
- End DoDot:2
- +52 SET CREAC=$PIECE($GET(PAM0),U,15)
- IF NCUIEN'=""
- Begin DoDot:2
- +53 SET CANREA=$$GET1^DIQ(409.2,CREAC,.01)
- End DoDot:2
- +54 SET RBD=$PIECE($GET(PAM0),U,10)
- End DoDot:1
- +55 IF AMUN=""
- Begin DoDot:1
- +56 SET AMUIEN=$PIECE($GET(PAM0),U,18)
- IF AMUIEN'=""
- Begin DoDot:2
- +57 SET AMUN=$$GET1^DIQ(200,AMUIEN,.01,"E")
- End DoDot:2
- End DoDot:1
- +58 IF AMD=""
- Begin DoDot:1
- +59 SET AMD=$PIECE($GET(PAM0),U,19)
- End DoDot:1
- +60 ;
- +61 ; -PATIENT/APPOINTMENT MULTIPLE GLOBAL LOCATION R
- +62 SET PAMR=$GET(^DPT(DFN,"S",ADT,"R"))
- IF PAMR'=""
- Begin DoDot:1
- +63 SET CANREM=$PIECE($GET(PAMR),U,1)
- End DoDot:1
- +64 ;
- +65 ; -CONVERT DATES TO EXTERNAL
- +66 ;
- +67 ; Change date/time conversion so midnight is handled properly. wtc 694 5/7/18
- +68 ;
- +69 ;I AMD'="" S Y=AMD D D^DIQ S AMD=Y
- +70 ;
- IF AMD'=""
- SET AMD=$$FMTONET^SDECDATE(AMD)
- +71 ;I CID'="" S Y=CID D D^DIQ S CID=Y
- +72 ;
- IF CID'=""
- SET CID=$$FMTONET^SDECDATE(CID)
- +73 ;I COD'="" S Y=COD D D^DIQ S COD=Y
- +74 ;
- IF COD'=""
- SET COD=$$FMTONET^SDECDATE(COD)
- +75 ;I COED'="" S Y=COED D D^DIQ S COED=Y
- +76 ;
- IF COED'=""
- SET COED=$$FMTONET^SDECDATE(COED)
- +77 ;I NCD'="" S Y=NCD D D^DIQ S NCD=Y
- +78 ;
- IF NCD'=""
- SET NCD=$$FMTONET^SDECDATE(NCD)
- +79 ;
- +80 SET RET=AMD_U_AMUN_U_CID_U_CIUN_U_COD_U_COUN_U_COED_U_NCD_U_NCUN_U_CANREA_U_CANREM_U_RBD
- +81 ;
- +82 DO EXIT
- +83 QUIT
- +84 ;
- GETWT(RET,DFN,ADT) ;
- +1 ; REQUIRE DFN AND APPOINTMENT DATE TIME
- +2 if '$GET(DFN)
- QUIT
- +3 if '$GET(ADT)
- QUIT
- +4 ;
- +5 ;strip off extra zeros on time pwc SD*5.3*694
- SET ADT=+ADT
- +6 DO INIT
- +7 ;
- +8 SET (REQTC,REQT,NATCODE,NAT,AMD,PAM1,CID,FUVCODE,FUV,CWT1,CWT2)=""
- +9 ;
- +10 ;REQTC=Request Type Code - Patient File Appointment Multiple [0,25]
- +11 ;REQT=Request Type
- +12 ;NATCODE=Next Available Type Code - Patient File Appointment Multiple [0,26]
- +13 ;NAT=Next Available Type
- +14 ;AMD=Appointment Made Date - Patient File Appointment Multiple [0,19]
- +15 ;PAM1=Global Location 1 of the Patient File Appointment Multiple
- +16 ;CID=Clinic Indicated Date/Preferred Date - Patient File Appointment Multiple [1,1]
- +17 ;FUVCODE=Follow-Up Visit Code 1=Yes 0=No - Patient File Appointment Multiple [1,2]
- +18 ;FUV=Follow-Up Visit
- +19 ;CWT1=Clinic Wait Time 1
- +20 ;CWT2=Clinic Wait Time 2
- +21 ;
- +22 ; -PATIENT/APPOINTMENT MULTIPLE GLOBAL LOCATION 0
- +23 IF PAM0'=""
- Begin DoDot:1
- +24 SET REQTC=$PIECE($GET(PAM0),U,25)
- IF REQTC'=""
- Begin DoDot:2
- +25 IF REQTC="N"
- SET REQT="'NEXT AVAILABLE' APPT."
- +26 IF REQTC="C"
- SET REQT="OTHER THAN 'NEXT AVA.' (CLINICIAN REQ.)"
- +27 IF REQTC="P"
- SET REQT="OTHER THAN 'NEXT AVA.' (PATIENT REQ.)"
- +28 IF REQTC="W"
- SET REQT="WALKIN APPT."
- +29 IF REQTC="M"
- SET REQT="MULTIPLE APPT. BOOKING"
- +30 IF REQTC="A"
- SET REQT="AUTO REBOOK"
- +31 IF REQTC="O"
- SET REQT="OTHER THAN 'NEXT AVA.' APPT."
- End DoDot:2
- +32 SET NATCODE=$PIECE($GET(PAM0),U,26)
- IF NATCODE'=""
- Begin DoDot:2
- +33 IF NATCODE=0
- SET NAT="NOT INDICATED TO BE A 'NEXT AVA.' APPT."
- +34 IF NATCODE=1
- SET NAT="'NEXT AVA.' APPT. INDICATED BY USER"
- +35 IF NATCODE=3
- SET NAT="'NEXT AVA.' APPT. INDICATED BY CALCULATION"
- +36 IF NATCODE=4
- SET NAT="'NEXT AVA.' APPT. INDICATED BY USER & CALCULATION"
- End DoDot:2
- +37 SET AMD=$PIECE($GET(PAM0),U,19)
- End DoDot:1
- +38 ;
- +39 ; -PATIENT/APPOINTMENT MULTIPLE GLOBAL LOCATION 1
- +40 SET PAM1=$GET(^DPT(DFN,"S",ADT,1))
- IF PAM1'=""
- Begin DoDot:1
- +41 SET CID=$PIECE($GET(PAM1),U,1)
- +42 SET FUVCODE=$PIECE($GET(PAM1),U,2)
- +43 SET FUV="No"
- IF FUVCODE=1
- SET FUV="Yes"
- End DoDot:1
- +44 ;
- +45 ; CALULATE WAIT TIMES
- +46 SET (X,X1,X2)=""
- +47 IF AMD'=""
- Begin DoDot:1
- +48 SET X1=ADT
- SET X2=AMD
- DO ^%DTC
- SET CWT1=X
- End DoDot:1
- +49 IF CID'=""
- Begin DoDot:1
- +50 SET X1=ADT
- SET X2=CID
- DO ^%DTC
- SET CWT2=X
- End DoDot:1
- +51 ;
- +52 ; -CONVERT DATES TO EXTERNAL
- +53 ;
- +54 ; Change date/time conversion so midnight is handled properly. wtc 694 5/7/18
- +55 ;
- +56 ;I CID'="" S Y=CID D D^DIQ S CID=Y
- +57 ;
- IF CID'=""
- SET CID=$$FMTONET^SDECDATE(CID)
- +58 ;
- +59 SET RET=REQT_U_NAT_U_CID_U_FUV_U_CWT1_U_CWT2
- +60 ;
- +61 DO EXIT
- +62 QUIT
- +63 ;
- +64 ;STATUS, LAST ADMIT/LODGER DATE, LAST DISCHARGE/LODGER DATE
- INP ;
- +1 if '$GET(DFN)
- QUIT
- +2 ;
- +3 SET (LADMT,LDIS,DNUM,STAT,SDST,SDSTA,REN,A)=""
- +4 IF '$DATA(^DGPM("C",DFN))
- SET LSTAT="NO INPT./LOD. ACT."
- QUIT
- +5 ;
- +6 SET VAIP("D")="L"
- SET VAIP("L")=""
- DO INP^DGPMV10
- +7 SET A=$SELECT("^3^5^"[("^"_+DGPMVI(2)_"^"):0,1:+DGPMVI(2))
- SET SDST=$SELECT('A:"IN",1:"")_"ACTIVE "
- SET SDSTA=$SELECT("^4^5^"[("^"_+DGPMVI(2)_"^"):"LODGER",1:"INPATIENT")
- +8 SET STAT=""
- SET STAT=SDST_SDSTA
- +9 SET LADMT=""
- SET LADMT=$PIECE($GET(DGPMVI(13,1)),"^",2)
- +10 SET DNUM=""
- SET DNUM=$GET(DGPMV1(17))
- IF DNUM'=""
- Begin DoDot:1
- +11 SET LDIS=""
- SET LDIS=$$GET1^DIQ(405,DNUM,.01)
- End DoDot:1
- +12 QUIT
- GETPTIN(RET,DFN,ADT) ;
- +1 ;REQUIRE DFN AND APPOINTMENT DATE TIME
- +2 if '$GET(DFN)
- QUIT
- +3 if '$GET(ADT)
- QUIT
- +4 ;
- +5 ;strip off extra zeros on time pwc SD*5.3*694
- SET ADT=+ADT
- +6 DO INIT
- +7 ;
- +8 SET (DOB,SSN,SEX,MARSIEN,MARS,RELGP,PAT36,PELIG,POS,SADDR1,SWASIAC)=""
- +9 SET (SADDR2,SADDR3,CITY,STATEN,STATE,CNTY,ADDR,PHN,CPHN,PGER,EMAIL,RADEXC)=""
- +10 SET (RADEX,STAT,POW,LADMT,AOEXLC,AOEXL,LDIS,CMBTVC,CMBTV,CMBTVED,PROJ112)=""
- +11 SET (PROCODE,SWASIA,PAT36,PAT11,PAT13,PAT36,PAT52,PAT321,PAT322,POWCODE)=""
- +12 SET (RELGPN,PELIGN,POSN)=""
- +13 ;
- +14 ;DOB=Date Of Birth - Patient File [0,3]
- +15 ;SSN=Formatted Social Security Number
- +16 ;SEX=Male or Female - Patient File [0,2]
- +17 ;MARSIEN=Marital Status IEN - Patient File [0,5]
- +18 ;MARS=Marital Status - Marital Status File (11) Field .01
- +19 ;RELGPN=Religious Preference IEN - Patient File [0,8]
- +20 ;RELGP=Religious Preference - file 13 field .01 (Name)
- +21 ;PELIGN=Primary Eligibility IEN - Patient File [.36,1]
- +22 ;PELIG=Primary Eligibility - File 8 field .01 (name)
- +23 ;POSN=Period of Service IEN
- +24 ;POS=Period of Service - File 21 Field .01 (Name)
- +25 ;SADDR1=Street Address 1 - Patient File [.11,1]
- +26 ;SADDR2=Street Address 2 - Patient File [.11,2]
- +27 ;SADDR3=Street Address 2 - Patient File [.11,3]
- +28 ;CITY=City - Patient File [.11,4]
- +29 ;STATEN=State IEN - Patient File [.11,5]
- +30 ;STATE=State - State File (5) Field .01
- +31 ;CNTYIEN=Country IEN - Patient File [.11,10]
- +32 ;CNTY=Country - Country Code File (779.004) Field .01
- +33 ;ADDR=Address
- +34 ;PHN=Phone Number - Patient File [.13,1]
- +35 ;CPHN=Cell Phone Number - Patient File [.13,4]
- +36 ;PGER=Pager Number - Patient File [.13,5]
- +37 ;EMAIL=Email Address - Patient File [.13,3]
- +38 ;RADEXC=Radiation Exposure CODE Y=Yes N=No U=Unknown - Patient File [.321,3]
- +39 ;RADEX=Radiation Exposure
- +40 ;
- +41 ;STAT=Status ???
- +42 ;
- +43 ;POWCODE=Prisoner Of War CODE Y=Yes N=No U=Unknown - Patient File [.52,5]
- +44 ;POW=Prisoner Of War
- +45 ;
- +46 ;LADMT=Last Admit/Lodger Date ???
- +47 ;
- +48 ;AOEXLC=Agent Orange Exposure Location CODE K=Korean DMZ V=Vietnam O=Other - Patient File [.321,13]
- +49 ;AOEXL=Agent Orange Exposure Location
- +50 ;
- +51 ;LDIS=Last Discharge/Lodger Date ???
- +52 ;
- +53 ;CMBTVC=Combat Veteran CODE Y=Yes N=No - Patient File [.52,11]
- +54 ;CMBTV=Combat Veteran
- +55 ;CMBTVED=Combat Veteran End Date - Patient File [.52,14]
- +56 ;PROCODE=Project 112/SHAD CODE 0=No 1=Yes - Patient File [.321,15]
- +57 ;PROJ112=Project 112/SHAD
- +58 ;SWASIAC=SW Asia Conditions Code Y=Yes N=No U=Unknown - Patient File [.322,13]
- +59 ;SWASIA=SW Asia Conditions
- +60 ;
- +61 ; -PATIENT FILE GLOBAL LOCATION 0
- +62 IF PAT0'=""
- Begin DoDot:1
- +63 SET DOB=$PIECE($GET(PAT0),U,3)
- +64 SET SSN=$$LAST4SSN^SDESINPUTVALUTL(DFN)
- +65 SET SEXCODE=$PIECE($GET(PAT0),U,2)
- IF SEXCODE'=""
- Begin DoDot:2
- +66 IF SEXCODE="M"
- SET SEX="Male"
- +67 IF SEXCODE="F"
- SET SEX="Female"
- End DoDot:2
- +68 SET MARSIEN=$PIECE($GET(PAT0),U,5)
- IF MARSIEN'=""
- Begin DoDot:2
- +69 SET MARS=$$GET1^DIQ(11,MARSIEN,.01)
- End DoDot:2
- +70 SET RELGPN=$PIECE($GET(PAT0),U,8)
- IF RELGPN'=""
- Begin DoDot:2
- +71 SET RELGP=$$GET1^DIQ(13,RELGPN,.01)
- End DoDot:2
- End DoDot:1
- +72 ;
- +73 ; -PATIENT FILE GLOBAL LOCATION .11
- +74 SET PAT11=$GET(^DPT(DFN,.11))
- IF PAT11'=""
- Begin DoDot:1
- +75 SET SADDR1=$PIECE($GET(PAT11),U,1)
- +76 SET SADDR2=$PIECE($GET(PAT11),U,2)
- +77 SET SADDR3=$PIECE($GET(PAT11),U,3)
- +78 SET CITY=$PIECE($GET(PAT11),U,4)
- +79 SET STATEN=$PIECE($GET(PAT11),U,5)
- IF STATEN'=""
- Begin DoDot:2
- +80 SET STATE=$$GET1^DIQ(5,STATEN,.01)
- End DoDot:2
- +81 SET ZCODE=$PIECE($GET(PAT11),U,6)
- +82 SET CNTYIEN=$PIECE($GET(PAT11),U,10)
- IF CNTYIEN'=""
- Begin DoDot:2
- +83 SET CNTY=$$GET1^DIQ(779.004,CNTYIEN,.01)
- End DoDot:2
- +84 SET SADDR=SADDR1
- IF SADDR2'=""
- Begin DoDot:2
- +85 SET SADDR=SADDR1_" "_SADDR2
- IF SADDR3'=""
- Begin DoDot:3
- +86 SET SADDR=SADDR1_" "_SADDR2_" "_SADDR3
- End DoDot:3
- End DoDot:2
- +87 SET ADDR=SADDR_" "_CITY_", "_STATE_" "_ZCODE_" "_CNTY
- End DoDot:1
- +88 ;
- +89 ; -PATIENT FILE GLOBAL LOCATION .13
- +90 SET PAT13=$GET(^DPT(DFN,.13))
- IF PAT13'=""
- Begin DoDot:1
- +91 SET PHN=$PIECE($GET(PAT13),U,1)
- +92 SET CPHN=$PIECE($GET(PAT13),U,4)
- +93 SET PGER=$PIECE($GET(PAT13),U,5)
- +94 SET EMAIL=$PIECE($GET(PAT13),U,3)
- End DoDot:1
- +95 ;
- +96 ; -PATIENT FILE GLOBAL LOCATION .36
- +97 SET PAT36=$GET(^DPT(DFN,.36))
- IF PAT36'=""
- Begin DoDot:1
- +98 SET PELIGN=$PIECE($GET(PAT36),U,1)
- IF PELIGN'=""
- Begin DoDot:2
- +99 SET PELIG=$$GET1^DIQ(8,PELIGN,.01)
- End DoDot:2
- End DoDot:1
- +100 ;
- +101 ; -PATIENT FILE GLOBAL LOCATION .52
- +102 SET PAT52=$GET(^DPT(DFN,.52))
- IF PAT52'=""
- Begin DoDot:1
- +103 SET POWCODE=$PIECE($GET(PAT52),U,5)
- IF POWCODE'=""
- Begin DoDot:2
- +104 IF POWCODE="Y"
- SET POW="Yes"
- +105 IF POWCODE="N"
- SET POW="No"
- +106 IF POWCODE="U"
- SET POW="Unknown"
- End DoDot:2
- +107 SET CMBTVC=$PIECE($GET(PAT52),U,11)
- IF CMBTVC'=""
- Begin DoDot:2
- +108 SET CMBTV="No"
- +109 IF CMBTVC="Y"
- SET CMBTV="Yes"
- End DoDot:2
- +110 SET CMBTVED=$PIECE($GET(PAT52),U,14)
- IF CMBTV="No"
- Begin DoDot:2
- +111 SET CMBTVED="N/A"
- End DoDot:2
- End DoDot:1
- +112 ;
- +113 ; -PATIENT FILE GLOBAL LOCATION .321
- +114 SET PAT321=$GET(^DPT(DFN,.52))
- IF PAT321'=""
- Begin DoDot:1
- +115 SET RADEXC=$PIECE($GET(PAT321),U,3)
- IF RADEXC'=""
- Begin DoDot:2
- +116 IF RADEXC="Y"
- SET RADEX="Yes"
- +117 IF RADEXC="N"
- SET RADEX="No"
- +118 IF RADEXC="U"
- SET RADEX="Unknown"
- End DoDot:2
- +119 SET AOEXLC=$PIECE($GET(PAT321),U,13)
- IF AOEXLC'=""
- Begin DoDot:2
- +120 IF AOEXLC="K"
- SET AOEXL="Korean DMZ"
- +121 IF AOEXLC="V"
- SET AOEXL="Vietnam"
- +122 IF AOEXLC="O"
- SET AOEXL="Other (Not Korean DMZ or Vietnam)"
- End DoDot:2
- +123 SET PROCODE=$PIECE($GET(PAT321),U,15)
- IF PROCODE'=""
- Begin DoDot:2
- +124 IF PROCODE=2
- SET PROJ112="No"
- +125 IF PROCODE=1
- SET PROJ112="Yes"
- End DoDot:2
- End DoDot:1
- +126 ;
- +127 ; -PATIENT FILE GLOBAL LOCATION .322
- +128 SET PAT322=$GET(^DPT(DFN,.52))
- IF PAT322'=""
- Begin DoDot:1
- +129 SET SWASIAC=$PIECE($GET(PAT322),U,13)
- IF SWASIAC'=""
- Begin DoDot:2
- +130 IF SWASIAC="Y"
- SET SWASIA="Yes"
- +131 IF SWASIAC="N"
- SET SWASIA="No"
- +132 IF SWASIAC="U"
- SET SWASIA="Unknown"
- End DoDot:2
- End DoDot:1
- +133 ;
- +134 ; -CONVERT DATES TO EXTERNAL
- +135 IF DOB'=""
- SET Y=DOB
- DO D^DIQ
- SET DOB=Y
- +136 ;
- +137 ; -PERIOD OF SERVICE
- +138 SET (POSN,POS)=""
- SET POSN=$$GET1^DIQ(2,DFN_",",.323,"I")
- IF POSN'=""
- SET POS=$$GET1^DIQ(21,POSN,.01,"E")
- +139 ;
- +140 ; -GET STAT, LADMT, LDIS
- +141 DO INP
- +142 ;
- +143 SET RET=DOB_U_SSN_U_SEX_U_MARS_U_RELGP_U_PELIG_U_POS_U_ADDR_U_PHN_U_CPHN_U_PGER_U_EMAIL_U_RADEX_U_STAT_U_POW_U_LADMT_U_AOEXL_U_LDIS_U_CMBTV_U_CMBTVED_U_PROJ112_U_SWASIA
- +144 ;
- +145 DO EXIT
- +146 QUIT
- +147 ;
- EXIT ;
- +1 KILL PAT0,PAM0,CLIEN,HLF0,HLAPIEN,HLAP0,PAMS,PCODE,ATIEN,CCODE,ECODE,PAMSC
- +2 KILL AMUIEN,AMU,HLAPC,CIUIEN,COUIEN,NCUIEN,PAT36,SADDR1,SWASIAC,SADDR2,SADDR3
- +3 KILL CITY,STATEN,STATE,CNTY,RADEXC,AOEXLC,CMBTVC,PROCODE,PAT36,PAT11,PAT13,PAT52
- +4 KILL PAT321,PAT322,ENROLC
- +5 QUIT