- SDAMA308 ;BPOIFO/JFW-Filter API Appointment Statuses; 5/10/04 8:13am [5/17/04 10:14am]
- ;;5.3;Scheduling;**301,406,1015**;13 Aug 1993;Build 21
- ;
- ;** GET APPOINTMENT STATUS **
- ; - Replaces $$STATUS^SDAM1 -
- ;*****************************************************************
- ; CHANGE LOG
- ;
- ; DATE PATCH DESCRIPTION
- ;-------- ---------- -----------------------------------------
- ;12/04/03 SD*5.3*301 ROUTINE COMPLETED
- ;10/11/06 SD*5.3*406 PRINT STATUS TEXT UPDATED
- ;
- ;*****************************************************************
- ;
- STATUS(DFN,SDT,SDCL,SDSTS,SDCHKIN,SDCHKOUT,SDEIFN) ;Retrieve Appointment Status
- ;
- ; Input: DFN := IFN of Patient
- ; SDT := Appointment Date/Time (FM Format)
- ; SDCL := IFN of Clinic
- ; SDSTS := Current VistA Appointment Status (Optional)
- ; SDCHKIN := Appointment Check-In Date/Time (Optional)
- ; SDCHKOUT := Appointment Check-Out Date/Time (Optional)
- ; SDEIFN := Outpatient Encounter IFN for Appointment (Optional)
- ; Output: Appoinment Status IFN ; Status Name ; Print Status ;
- ; Check In Date/Time ; Check Out Date/Time ;
- ; Admission Movement IFN
- ; -1 if errors with DFN,SDT or SDCL
- ;
- ; Initialize Global Variables
- N SDI,SDQUIT,SDCODE,SDSTSD,SDPSTS,SDINDCTR,SDAMVT,VADMVT,VAINDT
- S SDQUIT=0
- ;Validate parameters
- F SDI="VDFN","FMDATE","VCLIN" Q:SDQUIT D @SDI
- Q:SDQUIT -1
- ; Set initial Status value, if no value set to NULL
- S SDSTSD=$S($G(SDSTS)]"":$P($T(@SDSTS),";;",3),1:"")
- ; No R appt status in original VistA code
- S:$G(SDSTS)="R" SDSTSD=""
- ; If Status is null check for non-count clinic
- I $G(SDSTSD)="" S SDCODE=$$GETSTOP^SDAMA305($G(SDCL)) S:$P($G(SDCODE),"^",3)="Y" SDSTSD="NON-COUNT"
- ;Get admission movement ifn
- S VAINDT=$G(SDT) D ADM^VADPT2
- ;Inpatient? (Check Status, Admission IFN?, Domicillary Ward?, Ward Location = "D"?)
- I SDSTSD["INPATIENT",$S('+VADMVT:1,'$P(^DG(43,1,0),"^",21):0,1:$P($G(^DIC(42,+$P($G(^DGPM(VADMVT,0)),"^",6),0)),"^",3)="D") S SDSTSD=""
- ; Determine Checked In/Out Indicator
- S SDINDCTR=$S(+$G(SDCHKOUT):"CHECKED OUT",+$G(SDCHKIN):"CHECKED IN",SDSTSD]"":"",$G(SDT)>(DT+.2359):"FUTURE",1:"NO ACTION TAKEN") S:SDSTSD="" SDSTSD=SDINDCTR
- I SDSTSD="NO ACTION TAKEN",$P($G(SDT),".")=DT,SDINDCTR'["CHECKED" S SDINDCTR="TODAY"
- I SDSTSD="CHECKED OUT"!(SDSTSD="CHECKED IN"),SDT'<$$REQDT^SDM1A,'$P($G(^SCE(+$G(SDEIFN),0)),"^",7) S SDSTSD="NO ACTION TAKEN"
- ; Determine PRINT STATUS
- S SDPSTS=$S(SDSTSD=SDINDCTR!(SDINDCTR=""):SDSTSD,1:"")
- I SDPSTS="" D
- .I SDSTSD["INPATIENT",$P($G(^SC(SDCL,0)),U,17)'="Y",$P($G(^SCE(+$G(SDEIFN),0)),U,7)="" S SDPSTS=$P(SDSTSD," ")_"/ACT REQ" Q
- .I SDSTSD="NO ACTION TAKEN",SDINDCTR="CHECKED OUT"!(SDINDCTR="CHECKED IN") S SDPSTS="ACT REQ/"_SDINDCTR Q
- .S SDPSTS=$S(SDSTSD="NO ACTION TAKEN":SDSTSD,1:$P(SDSTSD," "))_"/"_SDINDCTR
- I SDSTSD["INPATIENT",SDINDCTR="" D
- .I SDT>(DT+.2359) S SDPSTS=$P(SDSTSD," ")_"/FUTURE" Q
- .S SDPSTS=$P(SDSTSD," ")_"/NO ACT TAKN"
- ;Get Appointment Status IFN
- S SDAMVT=+$O(^SD(409.63,"AC",SDSTSD,0))
- Q SDAMVT_";"_SDSTSD_";"_SDPSTS_";"_$G(SDCHKIN)_";"_$G(SDCHKOUT)_";"_+VADMVT
- VDFN ; Verify for valid patient dfn
- I $G(DFN)="" S SDQUIT=1
- E I '$D(^DPT(DFN)) S SDQUIT=1
- Q
- VCLIN ; Verify for valid clinic dfn
- I $G(SDCL)="" S SDQUIT=1
- E I '$D(^SC(SDCL,0)) S SDQUIT=1
- Q
- FMDATE ;
- ; Appointment Date must be a valid internal FileMan Format
- N X,Y,%H,%T,%Y
- S Y=$G(SDT) D DD^%DT I Y=-1 S SDQUIT=1
- ; Appointment Date cannot be imprecise
- I 'SDQUIT S X=$G(SDT) D H^%DTC I %H=0 S SDQUIT=1
- Q
- ;
- ;LIST OF VISTA STATUS CODES /NEW DESCRIPTIONS /OLD DESCRIPTIONS
- CC ;;CANCELLED BY CLINIC;;CANCELLED BY CLINIC
- CCR ;;CANCELLED BY CLINIC & RESCHEDULED;;CANCELLED BY CLINIC & AUTO RE-BOOK
- CP ;;CANCELLED BY PATIENT;;CANCELLED BY PATIENT
- CPR ;;CANCELLED BY PATIENT & RESCHEDULED;;CANCELLED BY PATIENT & AUTO-REBOOK
- R ;;SCHEDULED/KEPT;;
- I ;;INPATIENT;;INPATIENT APPOINTMENT
- NS ;;NO-SHOW;;NO-SHOW
- NSR ;;NO-SHOW & RESCHEDULED;;NO-SHOW & AUTO RE-BOOK
- NT ;;NO ACTION TAKEN;;NO ACTION TAKEN
- SDAMA308 ;BPOIFO/JFW-Filter API Appointment Statuses; 5/10/04 8:13am [5/17/04 10:14am]
- +1 ;;5.3;Scheduling;**301,406,1015**;13 Aug 1993;Build 21
- +2 ;
- +3 ;** GET APPOINTMENT STATUS **
- +4 ; - Replaces $$STATUS^SDAM1 -
- +5 ;*****************************************************************
- +6 ; CHANGE LOG
- +7 ;
- +8 ; DATE PATCH DESCRIPTION
- +9 ;-------- ---------- -----------------------------------------
- +10 ;12/04/03 SD*5.3*301 ROUTINE COMPLETED
- +11 ;10/11/06 SD*5.3*406 PRINT STATUS TEXT UPDATED
- +12 ;
- +13 ;*****************************************************************
- +14 ;
- STATUS(DFN,SDT,SDCL,SDSTS,SDCHKIN,SDCHKOUT,SDEIFN) ;Retrieve Appointment Status
- +1 ;
- +2 ; Input: DFN := IFN of Patient
- +3 ; SDT := Appointment Date/Time (FM Format)
- +4 ; SDCL := IFN of Clinic
- +5 ; SDSTS := Current VistA Appointment Status (Optional)
- +6 ; SDCHKIN := Appointment Check-In Date/Time (Optional)
- +7 ; SDCHKOUT := Appointment Check-Out Date/Time (Optional)
- +8 ; SDEIFN := Outpatient Encounter IFN for Appointment (Optional)
- +9 ; Output: Appoinment Status IFN ; Status Name ; Print Status ;
- +10 ; Check In Date/Time ; Check Out Date/Time ;
- +11 ; Admission Movement IFN
- +12 ; -1 if errors with DFN,SDT or SDCL
- +13 ;
- +14 ; Initialize Global Variables
- +15 NEW SDI,SDQUIT,SDCODE,SDSTSD,SDPSTS,SDINDCTR,SDAMVT,VADMVT,VAINDT
- +16 SET SDQUIT=0
- +17 ;Validate parameters
- +18 FOR SDI="VDFN","FMDATE","VCLIN"
- IF SDQUIT
- QUIT
- DO @SDI
- +19 IF SDQUIT
- QUIT -1
- +20 ; Set initial Status value, if no value set to NULL
- +21 SET SDSTSD=$SELECT($GET(SDSTS)]"":$PIECE($TEXT(@SDSTS),";;",3),1:"")
- +22 ; No R appt status in original VistA code
- +23 IF $GET(SDSTS)="R"
- SET SDSTSD=""
- +24 ; If Status is null check for non-count clinic
- +25 IF $GET(SDSTSD)=""
- SET SDCODE=$$GETSTOP^SDAMA305($GET(SDCL))
- IF $PIECE($GET(SDCODE),"^",3)="Y"
- SET SDSTSD="NON-COUNT"
- +26 ;Get admission movement ifn
- +27 SET VAINDT=$GET(SDT)
- DO ADM^VADPT2
- +28 ;Inpatient? (Check Status, Admission IFN?, Domicillary Ward?, Ward Location = "D"?)
- +29 IF SDSTSD["INPATIENT"
- IF $SELECT('+VADMVT:1,'$PIECE(^DG(43,1,0),"^",21):0,1:$PIECE($GET(^DIC(42,+$PIECE($GET(^DGPM(VADMVT,0)),"^",6),0)),"^",3)="D")
- SET SDSTSD=""
- +30 ; Determine Checked In/Out Indicator
- +31 SET SDINDCTR=$SELECT(+$GET(SDCHKOUT):"CHECKED OUT",+$GET(SDCHKIN):"CHECKED IN",SDSTSD]"":"",$GET(SDT)>(DT+.2359):"FUTURE",1:"NO ACTION TAKEN")
- IF SDSTSD=""
- SET SDSTSD=SDINDCTR
- +32 IF SDSTSD="NO ACTION TAKEN"
- IF $PIECE($GET(SDT),".")=DT
- IF SDINDCTR'["CHECKED"
- SET SDINDCTR="TODAY"
- +33 IF SDSTSD="CHECKED OUT"!(SDSTSD="CHECKED IN")
- IF SDT'<$$REQDT^SDM1A
- IF '$PIECE($GET(^SCE(+$GET(SDEIFN),0)),"^",7)
- SET SDSTSD="NO ACTION TAKEN"
- +34 ; Determine PRINT STATUS
- +35 SET SDPSTS=$SELECT(SDSTSD=SDINDCTR!(SDINDCTR=""):SDSTSD,1:"")
- +36 IF SDPSTS=""
- Begin DoDot:1
- +37 IF SDSTSD["INPATIENT"
- IF $PIECE($GET(^SC(SDCL,0)),U,17)'="Y"
- IF $PIECE($GET(^SCE(+$GET(SDEIFN),0)),U,7)=""
- SET SDPSTS=$PIECE(SDSTSD," ")_"/ACT REQ"
- QUIT
- +38 IF SDSTSD="NO ACTION TAKEN"
- IF SDINDCTR="CHECKED OUT"!(SDINDCTR="CHECKED IN")
- SET SDPSTS="ACT REQ/"_SDINDCTR
- QUIT
- +39 SET SDPSTS=$SELECT(SDSTSD="NO ACTION TAKEN":SDSTSD,1:$PIECE(SDSTSD," "))_"/"_SDINDCTR
- End DoDot:1
- +40 IF SDSTSD["INPATIENT"
- IF SDINDCTR=""
- Begin DoDot:1
- +41 IF SDT>(DT+.2359)
- SET SDPSTS=$PIECE(SDSTSD," ")_"/FUTURE"
- QUIT
- +42 SET SDPSTS=$PIECE(SDSTSD," ")_"/NO ACT TAKN"
- End DoDot:1
- +43 ;Get Appointment Status IFN
- +44 SET SDAMVT=+$ORDER(^SD(409.63,"AC",SDSTSD,0))
- +45 QUIT SDAMVT_";"_SDSTSD_";"_SDPSTS_";"_$GET(SDCHKIN)_";"_$GET(SDCHKOUT)_";"_+VADMVT
- VDFN ; Verify for valid patient dfn
- +1 IF $GET(DFN)=""
- SET SDQUIT=1
- +2 IF '$TEST
- IF '$DATA(^DPT(DFN))
- SET SDQUIT=1
- +3 QUIT
- VCLIN ; Verify for valid clinic dfn
- +1 IF $GET(SDCL)=""
- SET SDQUIT=1
- +2 IF '$TEST
- IF '$DATA(^SC(SDCL,0))
- SET SDQUIT=1
- +3 QUIT
- FMDATE ;
- +1 ; Appointment Date must be a valid internal FileMan Format
- +2 NEW X,Y,%H,%T,%Y
- +3 SET Y=$GET(SDT)
- DO DD^%DT
- IF Y=-1
- SET SDQUIT=1
- +4 ; Appointment Date cannot be imprecise
- +5 IF 'SDQUIT
- SET X=$GET(SDT)
- DO H^%DTC
- IF %H=0
- SET SDQUIT=1
- +6 QUIT
- +7 ;
- +8 ;LIST OF VISTA STATUS CODES /NEW DESCRIPTIONS /OLD DESCRIPTIONS
- CC ;;CANCELLED BY CLINIC;;CANCELLED BY CLINIC
- CCR ;;CANCELLED BY CLINIC & RESCHEDULED;;CANCELLED BY CLINIC & AUTO RE-BOOK
- CP ;;CANCELLED BY PATIENT;;CANCELLED BY PATIENT
- CPR ;;CANCELLED BY PATIENT & RESCHEDULED;;CANCELLED BY PATIENT & AUTO-REBOOK
- R ;;SCHEDULED/KEPT;;
- I ;;INPATIENT;;INPATIENT APPOINTMENT
- NS ;;NO-SHOW;;NO-SHOW
- NSR ;;NO-SHOW & RESCHEDULED;;NO-SHOW & AUTO RE-BOOK
- NT ;;NO ACTION TAKEN;;NO ACTION TAKEN