SDAMA304 ;BPOIFO/ACS-Filter API Apply Filters ; 6/21/05 1:50pm
;;5.3;Scheduling;**301,347,508,1015**;13 Aug 1993;Build 21
;PER VHA DIRECTIVE 2004-038, DO NOT MODIFY THIS ROUTINE
;
;*****************************************************************
; CHANGE LOG
;
; DATE PATCH DESCRIPTION
;-------- ---------- -----------------------------------------
;12/04/03 SD*5.3*301 ROUTINE COMPLETED
;08/06/04 SD*5.3*347 ADDITION OF A NEW FILTER - DATE APPOINTMENT
; MADE (FIELD #16) AND 2 NEW FIELDS TO RETURN:
; 1) AUTO-REBOOKED APPT DATE/TIME (FIELD #24)
; 2) NO-SHOW/CANCEL APPT DATE/TIME (FIELD #25)
;02/22/07 SD*5.3*508 SEE SDAMA301 FOR CHANGE LIST
;*****************************************************************
;
;*****************************************************************
;
; APPLY FILTERS (Extrinsic call)
;
;INPUT
; SDFTYPE Filter Type (P-patient or C-clinic)
; SDARRAY Appointment Filter array
; SDFLTR Filter Flags array
; SDDV Appointment Data Values array
;
;OUTPUT
; SDMATCH -1 if no match
; 1 if match
;*****************************************************************
MATCH(SDFTYPE,SDARRAY,SDFLTR,SDDV) ;
N SDMATCH,SDX,SDCLIEN
S SDMATCH=0
;apply patient or clinic filters
I SDFTYPE="P" D PMATCH(.SDARRAY,.SDMATCH)
I SDFTYPE="C" D CMATCH(.SDARRAY,.SDMATCH)
Q SDMATCH
PMATCH(SDARRAY,SDMATCH) ;Apply ^DPT-related filters
S SDMATCH=1
;Clinic
I SDFLTR(2) D
. S SDDV(2)=$P($G(SDARRAY("DPT0")),"^",1)
. I SDDV(2)']"" S SDMATCH=0 Q
. ;apply filter to list or global
. I SDARRAY("CLNGBL")=1 D
.. S SDX=SDARRAY(2),SDCLIEN=SDDV(2)
.. I '$D(@(SDX_"SDCLIEN)")) S SDMATCH=0
. I SDARRAY("CLNGBL")=0 D
.. I ((";"_$G(SDARRAY(2))_";")'[(";"_SDDV(2)_";")) S SDMATCH=0
Q:'SDMATCH
;Appointment Status
I SDFLTR(3) D
. N SDSTAT,SDTEMP
. S SDTEMP=$P($G(SDARRAY("DPT0")),"^",2)
. S SDSTAT=$S($G(SDTEMP)="":"R",SDTEMP="I":"I",SDTEMP="C":"CC",1:"X")
. I SDSTAT="X" S SDSTAT=$S(SDTEMP="CA":"CCR",SDTEMP="PC":"CP",1:"X")
. I SDSTAT="X" S SDSTAT=$S(SDTEMP="PCA":"CPR",SDTEMP="N":"NS",1:"X")
. I SDSTAT="X" S SDSTAT=$S(SDTEMP="NA":"NSR",SDTEMP="NT":"NT",1:"X")
. S SDDV(3)=SDSTAT
. I ((";"_$G(SDARRAY(3))_";")'[(";"_SDDV(3)_";")) S SDMATCH=0
Q:'SDMATCH
;Encounter Exists (DEPRECATED 11/10/06 JFW)
;I SDFLTR(12) D
;.;get appointment encounter information
;.S SDDV(12)=$P($G(SDARRAY("DPT0")),"^",20)
;.;compare encounter information to filter value
;.; Y AND NULL match or N and NOT NULL match
;.I (((SDARRAY("ENCTR")["Y")&(SDDV(12)']""))!((SDARRAY("ENCTR")["N")&(SDDV(12)]""))) D
;..S SDMATCH=0
;Date Appointment Made
I SDFLTR(16) D
.;get date appointment made from specific appt
.S SDDV(16)=$P($G(SDARRAY("DPT0")),"^",19)
.;compare date with range of dates specified
.I $S(+SDDV(16)=SDARRAY("DAMFR"):0,+SDDV(16)=SDARRAY("DAMTO"):0,1:1) D
..I ((+SDDV(16)'>SDARRAY("DAMFR"))!(+SDDV(16)'<SDARRAY("DAMTO"))) D
...S SDMATCH=0
Q
;
CMATCH(SDARRAY,SDMATCH) ;Apply ^SC-related filters
N SDAMCLIN,SDSTOP
S SDMATCH=1
;Primary Stop Code
I SDFLTR(13) D
. S SDAMCLIN=+$G(SDARRAY("DPT0"))
. I $G(SDAMCLIN)="" S SDMATCH=0 Q
. S SDSTOP=$P($G(^SC(SDAMCLIN,0)),"^",7)
. I $G(SDSTOP)="" S SDMATCH=0 Q
. S SDDV(13)=$P($G(^DIC(40.7,SDSTOP,0)),"^",2)
. I $G(SDDV(13))="" S SDMATCH=0 Q
. I ((";"_$G(SDARRAY(13))_";")'[(";"_SDDV(13)_";")) S SDMATCH=0
Q
SDAMA304 ;BPOIFO/ACS-Filter API Apply Filters ; 6/21/05 1:50pm
+1 ;;5.3;Scheduling;**301,347,508,1015**;13 Aug 1993;Build 21
+2 ;PER VHA DIRECTIVE 2004-038, DO NOT MODIFY THIS ROUTINE
+3 ;
+4 ;*****************************************************************
+5 ; CHANGE LOG
+6 ;
+7 ; DATE PATCH DESCRIPTION
+8 ;-------- ---------- -----------------------------------------
+9 ;12/04/03 SD*5.3*301 ROUTINE COMPLETED
+10 ;08/06/04 SD*5.3*347 ADDITION OF A NEW FILTER - DATE APPOINTMENT
+11 ; MADE (FIELD #16) AND 2 NEW FIELDS TO RETURN:
+12 ; 1) AUTO-REBOOKED APPT DATE/TIME (FIELD #24)
+13 ; 2) NO-SHOW/CANCEL APPT DATE/TIME (FIELD #25)
+14 ;02/22/07 SD*5.3*508 SEE SDAMA301 FOR CHANGE LIST
+15 ;*****************************************************************
+16 ;
+17 ;*****************************************************************
+18 ;
+19 ; APPLY FILTERS (Extrinsic call)
+20 ;
+21 ;INPUT
+22 ; SDFTYPE Filter Type (P-patient or C-clinic)
+23 ; SDARRAY Appointment Filter array
+24 ; SDFLTR Filter Flags array
+25 ; SDDV Appointment Data Values array
+26 ;
+27 ;OUTPUT
+28 ; SDMATCH -1 if no match
+29 ; 1 if match
+30 ;*****************************************************************
MATCH(SDFTYPE,SDARRAY,SDFLTR,SDDV) ;
+1 NEW SDMATCH,SDX,SDCLIEN
+2 SET SDMATCH=0
+3 ;apply patient or clinic filters
+4 IF SDFTYPE="P"
DO PMATCH(.SDARRAY,.SDMATCH)
+5 IF SDFTYPE="C"
DO CMATCH(.SDARRAY,.SDMATCH)
+6 QUIT SDMATCH
PMATCH(SDARRAY,SDMATCH) ;Apply ^DPT-related filters
+1 SET SDMATCH=1
+2 ;Clinic
+3 IF SDFLTR(2)
Begin DoDot:1
+4 SET SDDV(2)=$PIECE($GET(SDARRAY("DPT0")),"^",1)
+5 IF SDDV(2)']""
SET SDMATCH=0
QUIT
+6 ;apply filter to list or global
+7 IF SDARRAY("CLNGBL")=1
Begin DoDot:2
+8 SET SDX=SDARRAY(2)
SET SDCLIEN=SDDV(2)
+9 IF '$DATA(@(SDX_"SDCLIEN)"))
SET SDMATCH=0
End DoDot:2
+10 IF SDARRAY("CLNGBL")=0
Begin DoDot:2
+11 IF ((";"_$GET(SDARRAY(2))_";")'[(";"_SDDV(2)_";"))
SET SDMATCH=0
End DoDot:2
End DoDot:1
+12 IF 'SDMATCH
QUIT
+13 ;Appointment Status
+14 IF SDFLTR(3)
Begin DoDot:1
+15 NEW SDSTAT,SDTEMP
+16 SET SDTEMP=$PIECE($GET(SDARRAY("DPT0")),"^",2)
+17 SET SDSTAT=$SELECT($GET(SDTEMP)="":"R",SDTEMP="I":"I",SDTEMP="C":"CC",1:"X")
+18 IF SDSTAT="X"
SET SDSTAT=$SELECT(SDTEMP="CA":"CCR",SDTEMP="PC":"CP",1:"X")
+19 IF SDSTAT="X"
SET SDSTAT=$SELECT(SDTEMP="PCA":"CPR",SDTEMP="N":"NS",1:"X")
+20 IF SDSTAT="X"
SET SDSTAT=$SELECT(SDTEMP="NA":"NSR",SDTEMP="NT":"NT",1:"X")
+21 SET SDDV(3)=SDSTAT
+22 IF ((";"_$GET(SDARRAY(3))_";")'[(";"_SDDV(3)_";"))
SET SDMATCH=0
End DoDot:1
+23 IF 'SDMATCH
QUIT
+24 ;Encounter Exists (DEPRECATED 11/10/06 JFW)
+25 ;I SDFLTR(12) D
+26 ;.;get appointment encounter information
+27 ;.S SDDV(12)=$P($G(SDARRAY("DPT0")),"^",20)
+28 ;.;compare encounter information to filter value
+29 ;.; Y AND NULL match or N and NOT NULL match
+30 ;.I (((SDARRAY("ENCTR")["Y")&(SDDV(12)']""))!((SDARRAY("ENCTR")["N")&(SDDV(12)]""))) D
+31 ;..S SDMATCH=0
+32 ;Date Appointment Made
+33 IF SDFLTR(16)
Begin DoDot:1
+34 ;get date appointment made from specific appt
+35 SET SDDV(16)=$PIECE($GET(SDARRAY("DPT0")),"^",19)
+36 ;compare date with range of dates specified
+37 IF $SELECT(+SDDV(16)=SDARRAY("DAMFR"):0,+SDDV(16)=SDARRAY("DAMTO"):0,1:1)
Begin DoDot:2
+38 IF ((+SDDV(16)'>SDARRAY("DAMFR"))!(+SDDV(16)'<SDARRAY("DAMTO")))
Begin DoDot:3
+39 SET SDMATCH=0
End DoDot:3
End DoDot:2
End DoDot:1
+40 QUIT
+41 ;
CMATCH(SDARRAY,SDMATCH) ;Apply ^SC-related filters
+1 NEW SDAMCLIN,SDSTOP
+2 SET SDMATCH=1
+3 ;Primary Stop Code
+4 IF SDFLTR(13)
Begin DoDot:1
+5 SET SDAMCLIN=+$GET(SDARRAY("DPT0"))
+6 IF $GET(SDAMCLIN)=""
SET SDMATCH=0
QUIT
+7 SET SDSTOP=$PIECE($GET(^SC(SDAMCLIN,0)),"^",7)
+8 IF $GET(SDSTOP)=""
SET SDMATCH=0
QUIT
+9 SET SDDV(13)=$PIECE($GET(^DIC(40.7,SDSTOP,0)),"^",2)
+10 IF $GET(SDDV(13))=""
SET SDMATCH=0
QUIT
+11 IF ((";"_$GET(SDARRAY(13))_";")'[(";"_SDDV(13)_";"))
SET SDMATCH=0
End DoDot:1
+12 QUIT