| 1 | SDAMA304 ;BPOIFO/ACS-Filter API Apply Filters ; 6/21/05 1:50pm | 
|---|
| 2 | ;;5.3;Scheduling;**301,347,508**;13 Aug 1993 | 
|---|
| 3 | ;PER VHA DIRECTIVE 2004-038, DO NOT MODIFY THIS ROUTINE | 
|---|
| 4 | ; | 
|---|
| 5 | ;***************************************************************** | 
|---|
| 6 | ;              CHANGE LOG | 
|---|
| 7 | ; | 
|---|
| 8 | ;  DATE      PATCH       DESCRIPTION | 
|---|
| 9 | ;--------  ----------    ----------------------------------------- | 
|---|
| 10 | ;12/04/03  SD*5.3*301    ROUTINE COMPLETED | 
|---|
| 11 | ;08/06/04  SD*5.3*347    ADDITION OF A NEW FILTER - DATE APPOINTMENT | 
|---|
| 12 | ;                        MADE (FIELD #16) AND 2 NEW FIELDS TO RETURN: | 
|---|
| 13 | ;                        1) AUTO-REBOOKED APPT DATE/TIME (FIELD #24) | 
|---|
| 14 | ;                        2) NO-SHOW/CANCEL APPT DATE/TIME (FIELD #25) | 
|---|
| 15 | ;02/22/07  SD*5.3*508    SEE SDAMA301 FOR CHANGE LIST | 
|---|
| 16 | ;***************************************************************** | 
|---|
| 17 | ; | 
|---|
| 18 | ;***************************************************************** | 
|---|
| 19 | ; | 
|---|
| 20 | ;                  APPLY FILTERS (Extrinsic call) | 
|---|
| 21 | ; | 
|---|
| 22 | ;INPUT | 
|---|
| 23 | ;  SDFTYPE    Filter Type (P-patient or C-clinic) | 
|---|
| 24 | ;  SDARRAY    Appointment Filter array | 
|---|
| 25 | ;  SDFLTR     Filter Flags array | 
|---|
| 26 | ;  SDDV       Appointment Data Values array | 
|---|
| 27 | ; | 
|---|
| 28 | ;OUTPUT | 
|---|
| 29 | ;  SDMATCH   -1 if no match | 
|---|
| 30 | ;             1 if match | 
|---|
| 31 | ;***************************************************************** | 
|---|
| 32 | MATCH(SDFTYPE,SDARRAY,SDFLTR,SDDV) ; | 
|---|
| 33 | N SDMATCH,SDX,SDCLIEN | 
|---|
| 34 | S SDMATCH=0 | 
|---|
| 35 | ;apply patient or clinic filters | 
|---|
| 36 | I SDFTYPE="P" D PMATCH(.SDARRAY,.SDMATCH) | 
|---|
| 37 | I SDFTYPE="C" D CMATCH(.SDARRAY,.SDMATCH) | 
|---|
| 38 | Q SDMATCH | 
|---|
| 39 | PMATCH(SDARRAY,SDMATCH) ;Apply ^DPT-related filters | 
|---|
| 40 | S SDMATCH=1 | 
|---|
| 41 | ;Clinic | 
|---|
| 42 | I SDFLTR(2) D | 
|---|
| 43 | . S SDDV(2)=$P($G(SDARRAY("DPT0")),"^",1) | 
|---|
| 44 | . I SDDV(2)']"" S SDMATCH=0 Q | 
|---|
| 45 | . ;apply filter to list or global | 
|---|
| 46 | . I SDARRAY("CLNGBL")=1 D | 
|---|
| 47 | .. S SDX=SDARRAY(2),SDCLIEN=SDDV(2) | 
|---|
| 48 | .. I '$D(@(SDX_"SDCLIEN)")) S SDMATCH=0 | 
|---|
| 49 | . I SDARRAY("CLNGBL")=0 D | 
|---|
| 50 | .. I ((";"_$G(SDARRAY(2))_";")'[(";"_SDDV(2)_";")) S SDMATCH=0 | 
|---|
| 51 | Q:'SDMATCH | 
|---|
| 52 | ;Appointment Status | 
|---|
| 53 | I SDFLTR(3) D | 
|---|
| 54 | . N SDSTAT,SDTEMP | 
|---|
| 55 | . S SDTEMP=$P($G(SDARRAY("DPT0")),"^",2) | 
|---|
| 56 | . S SDSTAT=$S($G(SDTEMP)="":"R",SDTEMP="I":"I",SDTEMP="C":"CC",1:"X") | 
|---|
| 57 | . I SDSTAT="X" S SDSTAT=$S(SDTEMP="CA":"CCR",SDTEMP="PC":"CP",1:"X") | 
|---|
| 58 | . I SDSTAT="X" S SDSTAT=$S(SDTEMP="PCA":"CPR",SDTEMP="N":"NS",1:"X") | 
|---|
| 59 | . I SDSTAT="X" S SDSTAT=$S(SDTEMP="NA":"NSR",SDTEMP="NT":"NT",1:"X") | 
|---|
| 60 | . S SDDV(3)=SDSTAT | 
|---|
| 61 | . I ((";"_$G(SDARRAY(3))_";")'[(";"_SDDV(3)_";")) S SDMATCH=0 | 
|---|
| 62 | Q:'SDMATCH | 
|---|
| 63 | ;Encounter Exists (DEPRECATED 11/10/06 JFW) | 
|---|
| 64 | ;I SDFLTR(12) D | 
|---|
| 65 | ;.;get appointment encounter information | 
|---|
| 66 | ;.S SDDV(12)=$P($G(SDARRAY("DPT0")),"^",20) | 
|---|
| 67 | ;.;compare encounter information to filter value | 
|---|
| 68 | ;.;      Y AND NULL match or N and NOT NULL match | 
|---|
| 69 | ;.I (((SDARRAY("ENCTR")["Y")&(SDDV(12)']""))!((SDARRAY("ENCTR")["N")&(SDDV(12)]""))) D | 
|---|
| 70 | ;..S SDMATCH=0 | 
|---|
| 71 | ;Date Appointment Made | 
|---|
| 72 | I SDFLTR(16) D | 
|---|
| 73 | .;get date appointment made from specific appt | 
|---|
| 74 | .S SDDV(16)=$P($G(SDARRAY("DPT0")),"^",19) | 
|---|
| 75 | .;compare date with range of dates specified | 
|---|
| 76 | .I $S(+SDDV(16)=SDARRAY("DAMFR"):0,+SDDV(16)=SDARRAY("DAMTO"):0,1:1) D | 
|---|
| 77 | ..I ((+SDDV(16)'>SDARRAY("DAMFR"))!(+SDDV(16)'<SDARRAY("DAMTO"))) D | 
|---|
| 78 | ...S SDMATCH=0 | 
|---|
| 79 | Q | 
|---|
| 80 | ; | 
|---|
| 81 | CMATCH(SDARRAY,SDMATCH) ;Apply ^SC-related filters | 
|---|
| 82 | N SDAMCLIN,SDSTOP | 
|---|
| 83 | S SDMATCH=1 | 
|---|
| 84 | ;Primary Stop Code | 
|---|
| 85 | I SDFLTR(13) D | 
|---|
| 86 | . S SDAMCLIN=+$G(SDARRAY("DPT0")) | 
|---|
| 87 | . I $G(SDAMCLIN)="" S SDMATCH=0 Q | 
|---|
| 88 | . S SDSTOP=$P($G(^SC(SDAMCLIN,0)),"^",7) | 
|---|
| 89 | . I $G(SDSTOP)="" S SDMATCH=0 Q | 
|---|
| 90 | . S SDDV(13)=$P($G(^DIC(40.7,SDSTOP,0)),"^",2) | 
|---|
| 91 | . I $G(SDDV(13))="" S SDMATCH=0 Q | 
|---|
| 92 | . I ((";"_$G(SDARRAY(13))_";")'[(";"_SDDV(13)_";")) S SDMATCH=0 | 
|---|
| 93 | Q | 
|---|