SDAMA303 ;BPOIFO/ACS-Filter API By Patient ; 9/14/05 12:45pm ;;5.3;Scheduling;**301,347,508**;13 Aug 1993 ;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 CHANGE CALL TO ^SDAMA305 TO SETARRAY ;02/22/07 SD*5.3*508 SEE SDAMA301 FOR CHANGE LIST ;***************************************************************** ; ;***************************************************************** ; ; GET APPOINTMENT DATA BY PATIENT ; ;INPUT ; SDARRAY Appointment Filter array ; SDDV Appointment Data Values array ; SDFLTR Filter Flags array ; ;***************************************************************** PAT(SDARRAY,SDDV,SDFLTR) ; N SDCOUNT,SDX,SDQUIT,SDPATIEN,SDSTART,SDEND,SDGBL S (SDCOUNT,SDQUIT)=0 ;Set up start and end date/times for search criteria I $G(SDARRAY("MAX"))'<0 D .S SDSTART=$S(SDARRAY("FR")'="":(SDARRAY("FR")-.000001),1:0) .S SDEND=(SDARRAY("TO")) I $G(SDARRAY("MAX"))<0 D .S SDSTART=$S($G(SDARRAY("FR"))'="":SDARRAY("FR"),1:0) .S SDEND=(SDARRAY("TO")+.000001) ; ;if patient is not in global, get patient from filter list I SDARRAY("PATGBL")=0 D . S SDCOUNT=$L(SDARRAY(4),";") . ;for each patient in the filter: . F SDX=1:1:SDCOUNT D .. S SDPATIEN=$P(SDARRAY(4),";",SDX) .. D GETAPPT(SDPATIEN,SDSTART,SDEND,.SDARRAY) ;if patient is in global, get patient from global I SDARRAY("PATGBL")=1 D . S SDGBL=SDARRAY(4),SDPATIEN=0 . ;for each patient in the global: . F S SDPATIEN=$O(@(SDGBL_"SDPATIEN)")) Q:+$G(SDPATIEN)=0 D .. D GETAPPT(SDPATIEN,SDSTART,SDEND,.SDARRAY) Q ; GETAPPT(SDPATIEN,SDSTART,SDEND,SDARRAY) ; ;if the patient has no appointments on ^DPT, get next patient Q:'$D(^DPT(SDPATIEN,"S")) ;since "by patient", 1st sort is patient S (SDARRAY("SORT1"),SDARRAY("PAT"))=SDPATIEN N SDAPPTDT ; ;get first "N" appointments I $G(SDARRAY("MAX"))'<0 D .S SDAPPTDT=SDSTART .;Spin through each appointment on DPT for current patient .F S SDAPPTDT=$O(^DPT(SDPATIEN,"S",SDAPPTDT)) Q:$S(+$G(SDAPPTDT)=0:1,SDAPPTDT>SDEND:1,SDARRAY("CNT")=$G(SDARRAY("MAX")):1,1:0) D .. D GETINFO(SDPATIEN,SDAPPTDT,.SDARRAY) ; ;get last "N" appointments I $G(SDARRAY("MAX"))<0 D .S SDAPPTDT=SDEND .;spin through each appointment on DPT for current patient (REVERSE Order) .F S SDAPPTDT=$O(^DPT(SDPATIEN,"S",SDAPPTDT),-1) Q:$S(+$G(SDAPPTDT)=0:1,SDAPPTDT