| [613] | 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
 | 
|---|