| 1 | PRCPXODI ;WOIFO/CC-purge On-Demand Audit Activity ; 11/30/06 4:04pm | 
|---|
| 2 | ;;5.1;IFCAP;**98**;Oct 20, 2000;Build 37 | 
|---|
| 3 | ;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
| 4 | Q | 
|---|
| 5 | ; Called from PRCPXALL where STOPDATE and PRCP("I") are set up | 
|---|
| 6 | ; PRCP("I") is the ien of the inventory point being cleaned | 
|---|
| 7 | ; STOPDATE is the oldest date for which activity is to be kept | 
|---|
| 8 | ; | 
|---|
| 9 | ; NOTE:  This program purges the On-Demand Audit records from each | 
|---|
| 10 | ;        item in the inventory point.  Although the program is | 
|---|
| 11 | ;        designed to purge any record older than the date indicated | 
|---|
| 12 | ;        in STOPDATE, it is also designed to retain the three most | 
|---|
| 13 | ;        recent audit records, regardless of how old they are. | 
|---|
| 14 | ; | 
|---|
| 15 | DQ N D,DA,DIC,DIK,ITEMDA,PRCPAUDT,PRCPCNT,PRCPSTOP,X | 
|---|
| 16 | ; loop through for each item | 
|---|
| 17 | S ITEMDA=0 | 
|---|
| 18 | F  S ITEMDA=$O(^PRCP(445,PRCP("I"),1,ITEMDA)) Q:+ITEMDA'>0  D | 
|---|
| 19 | . N X,PRCPKEEP | 
|---|
| 20 | . I $D(SCAN) W !,"ITEM # ",ITEMDA | 
|---|
| 21 | . S X=$O(^PRCP(445,PRCP("I"),1,ITEMDA,10,0)) Q:X=""  ; no audits on file | 
|---|
| 22 | . S X=$P($G(^PRCP(445,PRCP("I"),1,ITEMDA,10,X,0)),"^",1) ; date of audit | 
|---|
| 23 | . I $D(SCAN) W !,"OLDEST AUDIT DATE: ",X | 
|---|
| 24 | . I X'<STOPDATE Q  ; earliest audit is within retention period | 
|---|
| 25 | . ; | 
|---|
| 26 | . ; Item has entries that could be purged, save 3 most recent entries | 
|---|
| 27 | . S PRCPAUDT="A",PRCPCNT=0,PRCPSTOP=0 | 
|---|
| 28 | . ; Find 3 oldest entries then proceed to next section | 
|---|
| 29 | . F  S PRCPAUDT=$O(^PRCP(445,PRCP("I"),1,ITEMDA,10,PRCPAUDT),-1) Q:'+PRCPAUDT  D  Q:PRCPCNT=3 | 
|---|
| 30 | . . S PRCPCNT=PRCPCNT+1 I $D(SCAN) W !,"FOUND:",PRCPCNT | 
|---|
| 31 | . . I PRCPCNT<4 S PRCPKEEP(PRCPAUDT)=PRCPCNT Q  ; keep three most recent audit records | 
|---|
| 32 | . . Q | 
|---|
| 33 | . ; | 
|---|
| 34 | . I PRCPCNT<3 Q  ; only 2 records exists and all must be kept | 
|---|
| 35 | . ; Loop through all audit records on file, starting with the oldest | 
|---|
| 36 | . ; Continue processing until the audit date of a record follows the stop date or processing hits one of the 3 most recent records. | 
|---|
| 37 | . S PRCPAUDT=0 | 
|---|
| 38 | . F  S PRCPAUDT=$O(^PRCP(445,PRCP("I"),1,ITEMDA,10,PRCPAUDT)) Q:'+PRCPAUDT  D  I PRCPSTOP Q | 
|---|
| 39 | . . S X=$P($G(^PRCP(445,PRCP("I"),1,ITEMDA,10,PRCPAUDT,0)),"^",1) ; get date of audit record | 
|---|
| 40 | . . I $D(SCAN) W !,"AUDIT DATE: ",X,"   STOPDATE:",STOPDATE | 
|---|
| 41 | . . I X'<STOPDATE!$D(PRCPKEEP(PRCPAUDT)) S PRCPSTOP=1 Q  ; no more to purge | 
|---|
| 42 | . . I $D(SCAN) W !,X," WILL BE PURGED" Q | 
|---|
| 43 | . . S DIK="^PRCP(445,"_PRCP("I")_",1,"_ITEMDA_",10,",DA(1)=ITEMDA,DA(2)=PRCP("I"),DA=PRCPAUDT D ^DIK K DIK,DA | 
|---|
| 44 | ; | 
|---|
| 45 | Q | 
|---|
| 46 | ; | 
|---|
| 47 | TEST ; RUN WITHOUT DELETING AND WITH SCAN ON | 
|---|
| 48 | N SCAN | 
|---|
| 49 | S SCAN=1 | 
|---|
| 50 | S STOPDATE=3060625 | 
|---|
| 51 | ;S STOPDATE=3061125 | 
|---|
| 52 | S PRCP("I")=9 | 
|---|
| 53 | D DQ | 
|---|
| 54 | Q | 
|---|