SDES2GETSTATUS ;ALB/LAB,BWF,TAW - VISTA CALL TO GET STATUS; SEP 04, 2025
;;5.3;Scheduling;**871,886,919**;Aug 13, 1993;Build 5
;;Per VHA Directive 6402, this routine should not be modified
;
Q
;
; This is a rewrite of SDEC50 code - rewritten by BWF and then pulled in by LAB
APPTSTATUS(APPTIEN,CLINIEN) ;Get current status for an entry in the SDEC APPOINTMENT file in the style of STATUS^SDAM1
;APPTIEN (R)- IEN of entry in the SDEC APPOINTMENT file (#409.84)
;CLINIEN (O)- IEN of entry in the HOSPITAL LOCATION file (#44); non-count will not be checked via clinic if not passed in (can check via OE)
N STATUS,OUTENCIEN,DFN,APPTDTTM,VAINDT,VADMVT,CHKIO,RET,OESTS,CANCELREASON,CANCELREASONTYP,CANCELSTATUS,STATUSDATE
N APPTIENS,ORIGSTATUSINT,NOSHOW,CANCELDTTM,CHECKOUTDT,NONCOUNT,CKOUTCOMP,APPTDATA,OESTATUS,CHECKINDT,CLINICDT,NOW
S APPTIENS=APPTIEN_","
D GETS^DIQ(409.84,APPTIENS,".01;.03;.05;.1;.101;.12;.122;.14;.17","IE","APPTDATA","APPTERR")
S APPTDTTM=$G(APPTDATA(409.84,APPTIENS,.01,"I"))
S DFN=$G(APPTDATA(409.84,APPTIENS,.05,"I"))
S OUTENCIEN=$$GET1^DIQ(2.98,APPTDTTM_","_DFN_",",21,"I")
S CHKIO=""
;
S NOW=$$FMTISO^SDAMUTDT($$NOW^XLFDT())
S CLINICDT=$$ISOTFM^SDAMUTDT(NOW,CLINIEN)
I +CLINICDT<1 S CLINICDT=DT ;Catch any errors returned from date conversions
S CLINICDT=$P(CLINICDT,".")
;
;
;set initial status value ; non-count clinic?
;
S ORIGSTATUSINT=$G(APPTDATA(409.84,APPTIENS,.17,"I"))
S STATUS=$G(APPTDATA(409.84,APPTIENS,.17,"E"))
;
; initial status date is set to the cancelled date/time
;
S (STATUSDATE,CANCELDTTM)=$G(APPTDATA(409.84,APPTIENS,.12,"I"))
S NONCOUNT=$$GET1^DIQ(44,CLINIEN,2502,"I")
I STATUS="",CLINIEN,NONCOUNT="Y" S STATUS="NON-COUNT" ;check for non-count clinic don't crash if resource/clinic not available
I CLINIEN'="",STATUS="NO ACTION TAKEN",OUTENCIEN'="" S STATUS=""
;
;no show?
;
S NOSHOW=$G(APPTDATA(409.84,APPTIENS,.1,"I"))
I NOSHOW=1 D
. I STATUSDATE]"" D Q ;handle cancel after no-show -- appt STATUS doesn't get updated with cxl but pt status does; 745 STATUSDATE
. .S CANCELREASON=$G(APPTDATA(409.84,APPTIENS,.122,"I"))
. .; Line below revised to use appointment status (field .17) to calculate status when reason is missing
. . I CANCELREASON="" S STATUS=$S(ORIGSTATUSINT="C":"CANCELLED BY CLINIC",ORIGSTATUSINT="PC":"CANCELLED BY PATIENT",1:"CANCELLED") Q
. . S CANCELREASONTYP=$$GET1^DIQ(409.2,CANCELREASON,2,"I")
. . I CANCELREASONTYP="C" S STATUS="CANCELLED BY CLINIC" Q
. . I CANCELREASONTYP="P" S STATUS="CANCELLED BY PATIENT" Q
. . S CANCELSTATUS=$$GET1^DIQ(2.98,APPTDTTM_","_DFN_",",100)
. . I CANCELSTATUS["CANCELLED" S STATUS=CANCELSTATUS Q
. . S STATUS="CANCELLED BY CLINIC" ;default to clinic if information is lost
. S STATUS="NO-SHOW",STATUSDATE=$G(APPTDATA(409.84,APPTIENS,.101,"I"))
I STATUS=""!(ORIGSTATUSINT="I"),$$INP^SDAM2(DFN,APPTDTTM)="I" D
. S STATUS=$S(CANCELDTTM="":"INPATIENT",$$GET1^DIQ(2.98,APPTDTTM_","_DFN_",",3,"I")="PC":"CANCELLED BY PATIENT",1:"CANCELLED BY CLINIC")
N SDNEXTIEN
S SDNEXTIEN=$O(^SDEC(409.84,"APTDT",DFN,APPTDTTM,APPTIEN))
I +$G(SDNEXTIEN),(ORIGSTATUSINT="I"),(CANCELDTTM'="") S STATUS="INPATIENT/CANCELLED"
Q:STATUS="INPATIENT/CANCELLED" STATUS
S VAINDT=APPTDTTM D ADM^VADPT2 ;ADM^VADPT2 assumes VAINDT and returns in VADMVT
;
; Reference to DOMICILIARY WARDS IN MAS PARAMETERS IA #483
; Reference to SERIVCE in WARD LOCATION - IA #1377
; Reference to WARD LOCATION in PATIENT MOVEMENT - IA #358
;
I STATUS["INPATIENT",$S('VADMVT:1,'$$GET1^DIQ(43,1,16,"I"):0,1:$$GET1^DIQ(42,+$$GET1^DIQ(405,VADMVT,.06,"I"),.03,"I")="D") S STATUS=""
; -- determine ci/co indicator
S CHECKINDT=$G(APPTDATA(409.84,APPTIENS,.03,"I"))
S CHECKOUTDT=$G(APPTDATA(409.84,APPTIENS,.14,"I"))
S CHKIO=$S(CHECKOUTDT]"":"CHECKED OUT",CHECKINDT]"":"CHECKED IN",APPTDTTM>(CLINICDT+.2400):"FUTURE",1:"NO ACTION TAKEN")
;
; Look for check-in time in the Location file (#44) if check-in/out indicator is NO ACTION TAKEN.
;
I CHKIO="NO ACTION TAKEN",CLINIEN'="" D
. N SFIEN S SFIEN=$$FIND^SDAM2(DFN,APPTDTTM,CLINIEN) I SFIEN,$$GET1^DIQ(44.003,SFIEN_","_APPTDTTM_","_CLINIEN_",",309)'="" S CHKIO="CHECKED IN" ;
S:STATUS="" STATUS=CHKIO
;If NO ACTION TAKEN, If cancelled in Patient(by SDCANCEL)
I STATUS'["CANCELLED" D ;
. I $$GET1^DIQ(2.98,APPTDTTM_","_DFN_",",.01,"I")'=CLINIEN Q ;If appointment does not match, leave status alone.
. S STATUS=$S($$GET1^DIQ(2.98,APPTDTTM_","_DFN_",",3,"I")="PC":"CANCELLED BY PATIENT",$$GET1^DIQ(2.98,APPTDTTM_","_DFN_",",3,"I")="C":"CANCELLED BY CLINIC",1:STATUS)
;
I (STATUS="NO ACTION TAKEN"),($P(APPTDTTM,".")=CLINICDT),(CHKIO'["CHECKED") S CHKIO="TODAY"
; -- determine print status
I STATUS["CANCELLED" Q STATUS_"^"_STATUSDATE
S RET=$S(STATUS=CHKIO!(CHKIO=""):STATUS,1:"")
S CKOUTCOMP=$$GET1^DIQ(409.68,OUTENCIEN,.07,"I")
I RET="" D
. I STATUS["INPATIENT",$P(APPTDTTM,".",1)>CLINICDT S RET=$P(STATUS," ",1)_"/FUTURE" Q
. I (STATUS["INPATIENT"),(CLINIEN]""),(NONCOUNT'="Y"),OUTENCIEN="" S RET=$P(STATUS," ",1)_"/ACT REQ" Q ;no outpatient encounter for inpatient
. I (STATUS["INPATIENT"),(CLINIEN]""),(NONCOUNT'="Y"),(CKOUTCOMP="") S RET=$P(STATUS," ",1)_"/ACT REQ" Q
. I (STATUS="NO ACTION TAKEN"),((CHKIO="CHECKED OUT")!(CHKIO="CHECKED IN")) S RET="ACT REQ/"_CHKIO D Q
. . I (OUTENCIEN),(CKOUTCOMP) S RET="CHECKED OUT"
. I ((STATUS="NO-SHOW")!(STATUS="NON-COUNT")) S RET=STATUS Q:CHKIO="NO ACTION TAKEN"
. S RET=STATUS_"/"_CHKIO
I STATUS["INPATIENT",((CHKIO="")!(CHKIO="NO ACTION TAKEN")) D
. I APPTDTTM>(CLINICDT+.2359) S RET=$P(STATUS," ")_"/FUTURE" Q
. S RET=$P(STATUS," ")_"/NO ACT TAKN"
I STATUS["INPATIENT" Q RET
I STATUS["NO-SHOW" Q RET_"^"_STATUSDATE ;745
I ($G(OUTENCIEN)),($D(^SCE(OUTENCIEN,0))) D
. S OESTATUS=$$GET1^DIQ(409.68,OUTENCIEN,.12,"E")
. I $G(OESTATUS)="NON-COUNT" D Q
. . I CHECKOUTDT S RET="NON-COUNT/CHECKED OUT" Q
. . I CHECKINDT S RET="NON-COUNT/CHECKED IN"
. I $G(OESTATUS)="CHECKED OUT" S RET="CHECKED OUT" Q
. I CHECKOUTDT S RET="ACT REQ/CHECKED OUT" D Q
. . I ($G(OESTATUS)=""),(CKOUTCOMP) S RET="CHECKED OUT"
. I CHECKINDT S RET="ACT REQ/CHECKED IN"
Q RET
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HSDES2GETSTATUS 6214 printed Jan 29, 2026@15:53:25 Page 2
SDES2GETSTATUS ;ALB/LAB,BWF,TAW - VISTA CALL TO GET STATUS; SEP 04, 2025
+1 ;;5.3;Scheduling;**871,886,919**;Aug 13, 1993;Build 5
+2 ;;Per VHA Directive 6402, this routine should not be modified
+3 ;
+4 QUIT
+5 ;
+6 ; This is a rewrite of SDEC50 code - rewritten by BWF and then pulled in by LAB
APPTSTATUS(APPTIEN,CLINIEN) ;Get current status for an entry in the SDEC APPOINTMENT file in the style of STATUS^SDAM1
+1 ;APPTIEN (R)- IEN of entry in the SDEC APPOINTMENT file (#409.84)
+2 ;CLINIEN (O)- IEN of entry in the HOSPITAL LOCATION file (#44); non-count will not be checked via clinic if not passed in (can check via OE)
+3 NEW STATUS,OUTENCIEN,DFN,APPTDTTM,VAINDT,VADMVT,CHKIO,RET,OESTS,CANCELREASON,CANCELREASONTYP,CANCELSTATUS,STATUSDATE
+4 NEW APPTIENS,ORIGSTATUSINT,NOSHOW,CANCELDTTM,CHECKOUTDT,NONCOUNT,CKOUTCOMP,APPTDATA,OESTATUS,CHECKINDT,CLINICDT,NOW
+5 SET APPTIENS=APPTIEN_","
+6 DO GETS^DIQ(409.84,APPTIENS,".01;.03;.05;.1;.101;.12;.122;.14;.17","IE","APPTDATA","APPTERR")
+7 SET APPTDTTM=$GET(APPTDATA(409.84,APPTIENS,.01,"I"))
+8 SET DFN=$GET(APPTDATA(409.84,APPTIENS,.05,"I"))
+9 SET OUTENCIEN=$$GET1^DIQ(2.98,APPTDTTM_","_DFN_",",21,"I")
+10 SET CHKIO=""
+11 ;
+12 SET NOW=$$FMTISO^SDAMUTDT($$NOW^XLFDT())
+13 SET CLINICDT=$$ISOTFM^SDAMUTDT(NOW,CLINIEN)
+14 ;Catch any errors returned from date conversions
IF +CLINICDT<1
SET CLINICDT=DT
+15 SET CLINICDT=$PIECE(CLINICDT,".")
+16 ;
+17 ;
+18 ;set initial status value ; non-count clinic?
+19 ;
+20 SET ORIGSTATUSINT=$GET(APPTDATA(409.84,APPTIENS,.17,"I"))
+21 SET STATUS=$GET(APPTDATA(409.84,APPTIENS,.17,"E"))
+22 ;
+23 ; initial status date is set to the cancelled date/time
+24 ;
+25 SET (STATUSDATE,CANCELDTTM)=$GET(APPTDATA(409.84,APPTIENS,.12,"I"))
+26 SET NONCOUNT=$$GET1^DIQ(44,CLINIEN,2502,"I")
+27 ;check for non-count clinic don't crash if resource/clinic not available
IF STATUS=""
IF CLINIEN
IF NONCOUNT="Y"
SET STATUS="NON-COUNT"
+28 IF CLINIEN'=""
IF STATUS="NO ACTION TAKEN"
IF OUTENCIEN'=""
SET STATUS=""
+29 ;
+30 ;no show?
+31 ;
+32 SET NOSHOW=$GET(APPTDATA(409.84,APPTIENS,.1,"I"))
+33 IF NOSHOW=1
Begin DoDot:1
+34 ;handle cancel after no-show -- appt STATUS doesn't get updated with cxl but pt status does; 745 STATUSDATE
IF STATUSDATE]""
Begin DoDot:2
+35 SET CANCELREASON=$GET(APPTDATA(409.84,APPTIENS,.122,"I"))
+36 ; Line below revised to use appointment status (field .17) to calculate status when reason is missing
+37 IF CANCELREASON=""
SET STATUS=$SELECT(ORIGSTATUSINT="C":"CANCELLED BY CLINIC",ORIGSTATUSINT="PC":"CANCELLED BY PATIENT",1:"CANCELLED")
QUIT
+38 SET CANCELREASONTYP=$$GET1^DIQ(409.2,CANCELREASON,2,"I")
+39 IF CANCELREASONTYP="C"
SET STATUS="CANCELLED BY CLINIC"
QUIT
+40 IF CANCELREASONTYP="P"
SET STATUS="CANCELLED BY PATIENT"
QUIT
+41 SET CANCELSTATUS=$$GET1^DIQ(2.98,APPTDTTM_","_DFN_",",100)
+42 IF CANCELSTATUS["CANCELLED"
SET STATUS=CANCELSTATUS
QUIT
+43 ;default to clinic if information is lost
SET STATUS="CANCELLED BY CLINIC"
End DoDot:2
QUIT
+44 SET STATUS="NO-SHOW"
SET STATUSDATE=$GET(APPTDATA(409.84,APPTIENS,.101,"I"))
End DoDot:1
+45 IF STATUS=""!(ORIGSTATUSINT="I")
IF $$INP^SDAM2(DFN,APPTDTTM)="I"
Begin DoDot:1
+46 SET STATUS=$SELECT(CANCELDTTM="":"INPATIENT",$$GET1^DIQ(2.98,APPTDTTM_","_DFN_",",3,"I")="PC":"CANCELLED BY PATIENT",1:"CANCELLED BY CLINIC")
End DoDot:1
+47 NEW SDNEXTIEN
+48 SET SDNEXTIEN=$ORDER(^SDEC(409.84,"APTDT",DFN,APPTDTTM,APPTIEN))
+49 IF +$GET(SDNEXTIEN)
IF (ORIGSTATUSINT="I")
IF (CANCELDTTM'="")
SET STATUS="INPATIENT/CANCELLED"
+50 if STATUS="INPATIENT/CANCELLED"
QUIT STATUS
+51 ;ADM^VADPT2 assumes VAINDT and returns in VADMVT
SET VAINDT=APPTDTTM
DO ADM^VADPT2
+52 ;
+53 ; Reference to DOMICILIARY WARDS IN MAS PARAMETERS IA #483
+54 ; Reference to SERIVCE in WARD LOCATION - IA #1377
+55 ; Reference to WARD LOCATION in PATIENT MOVEMENT - IA #358
+56 ;
+57 IF STATUS["INPATIENT"
IF $SELECT('VADMVT:1,'$$GET1^DIQ(43,1,16,"I"):0,1:$$GET1^DIQ(42,+$$GET1^DIQ(405,VADMVT,.06,"I"),.03,"I")="D")
SET STATUS=""
+58 ; -- determine ci/co indicator
+59 SET CHECKINDT=$GET(APPTDATA(409.84,APPTIENS,.03,"I"))
+60 SET CHECKOUTDT=$GET(APPTDATA(409.84,APPTIENS,.14,"I"))
+61 SET CHKIO=$SELECT(CHECKOUTDT]"":"CHECKED OUT",CHECKINDT]"":"CHECKED IN",APPTDTTM>(CLINICDT+.2400):"FUTURE",1:"NO ACTION TAKEN")
+62 ;
+63 ; Look for check-in time in the Location file (#44) if check-in/out indicator is NO ACTION TAKEN.
+64 ;
+65 IF CHKIO="NO ACTION TAKEN"
IF CLINIEN'=""
Begin DoDot:1
+66 ;
NEW SFIEN
SET SFIEN=$$FIND^SDAM2(DFN,APPTDTTM,CLINIEN)
IF SFIEN
IF $$GET1^DIQ(44.003,SFIEN_","_APPTDTTM_","_CLINIEN_",",309)'=""
SET CHKIO="CHECKED IN"
End DoDot:1
+67 if STATUS=""
SET STATUS=CHKIO
+68 ;If NO ACTION TAKEN, If cancelled in Patient(by SDCANCEL)
+69 ;
IF STATUS'["CANCELLED"
Begin DoDot:1
+70 ;If appointment does not match, leave status alone.
IF $$GET1^DIQ(2.98,APPTDTTM_","_DFN_",",.01,"I")'=CLINIEN
QUIT
+71 SET STATUS=$SELECT($$GET1^DIQ(2.98,APPTDTTM_","_DFN_",",3,"I")="PC":"CANCELLED BY PATIENT",$$GET1^DIQ(2.98,APPTDTTM_","_DFN_",",3,"I")="C":"CANCELLED BY CLINIC",1:STATUS)
End DoDot:1
+72 ;
+73 IF (STATUS="NO ACTION TAKEN")
IF ($PIECE(APPTDTTM,".")=CLINICDT)
IF (CHKIO'["CHECKED")
SET CHKIO="TODAY"
+74 ; -- determine print status
+75 IF STATUS["CANCELLED"
QUIT STATUS_"^"_STATUSDATE
+76 SET RET=$SELECT(STATUS=CHKIO!(CHKIO=""):STATUS,1:"")
+77 SET CKOUTCOMP=$$GET1^DIQ(409.68,OUTENCIEN,.07,"I")
+78 IF RET=""
Begin DoDot:1
+79 IF STATUS["INPATIENT"
IF $PIECE(APPTDTTM,".",1)>CLINICDT
SET RET=$PIECE(STATUS," ",1)_"/FUTURE"
QUIT
+80 ;no outpatient encounter for inpatient
IF (STATUS["INPATIENT")
IF (CLINIEN]"")
IF (NONCOUNT'="Y")
IF OUTENCIEN=""
SET RET=$PIECE(STATUS," ",1)_"/ACT REQ"
QUIT
+81 IF (STATUS["INPATIENT")
IF (CLINIEN]"")
IF (NONCOUNT'="Y")
IF (CKOUTCOMP="")
SET RET=$PIECE(STATUS," ",1)_"/ACT REQ"
QUIT
+82 IF (STATUS="NO ACTION TAKEN")
IF ((CHKIO="CHECKED OUT")!(CHKIO="CHECKED IN"))
SET RET="ACT REQ/"_CHKIO
Begin DoDot:2
+83 IF (OUTENCIEN)
IF (CKOUTCOMP)
SET RET="CHECKED OUT"
End DoDot:2
QUIT
+84 IF ((STATUS="NO-SHOW")!(STATUS="NON-COUNT"))
SET RET=STATUS
if CHKIO="NO ACTION TAKEN"
QUIT
+85 SET RET=STATUS_"/"_CHKIO
End DoDot:1
+86 IF STATUS["INPATIENT"
IF ((CHKIO="")!(CHKIO="NO ACTION TAKEN"))
Begin DoDot:1
+87 IF APPTDTTM>(CLINICDT+.2359)
SET RET=$PIECE(STATUS," ")_"/FUTURE"
QUIT
+88 SET RET=$PIECE(STATUS," ")_"/NO ACT TAKN"
End DoDot:1
+89 IF STATUS["INPATIENT"
QUIT RET
+90 ;745
IF STATUS["NO-SHOW"
QUIT RET_"^"_STATUSDATE
+91 IF ($GET(OUTENCIEN))
IF ($DATA(^SCE(OUTENCIEN,0)))
Begin DoDot:1
+92 SET OESTATUS=$$GET1^DIQ(409.68,OUTENCIEN,.12,"E")
+93 IF $GET(OESTATUS)="NON-COUNT"
Begin DoDot:2
+94 IF CHECKOUTDT
SET RET="NON-COUNT/CHECKED OUT"
QUIT
+95 IF CHECKINDT
SET RET="NON-COUNT/CHECKED IN"
End DoDot:2
QUIT
+96 IF $GET(OESTATUS)="CHECKED OUT"
SET RET="CHECKED OUT"
QUIT
+97 IF CHECKOUTDT
SET RET="ACT REQ/CHECKED OUT"
Begin DoDot:2
+98 IF ($GET(OESTATUS)="")
IF (CKOUTCOMP)
SET RET="CHECKED OUT"
End DoDot:2
QUIT
+99 IF CHECKINDT
SET RET="ACT REQ/CHECKED IN"
End DoDot:1
+100 QUIT RET
+101 ;