| 1 | PRCG238P ;WISC/BGJ-IFCAP 410 FILE CLEANUP (PURGE) ;11/5/99 | 
|---|
| 2 | V ;;5.1;IFCAP;**95**;Oct 20, 2000 | 
|---|
| 3 | ;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
| 4 | ;This routine is installed by patch PRC*5*238. | 
|---|
| 5 | ;The purpose of this routine is to cleanup entries in files 410, 410.1 | 
|---|
| 6 | ;and 443 that are leftover after running the Archive/Purge | 
|---|
| 7 | ;functionality.  Routine PRCG238Q is a routine installed by patch 238 | 
|---|
| 8 | ;that queues entries into PurgeMaster for purging.  Those entries | 
|---|
| 9 | ;are then purged by this routine as PurgeMaster cycles through file | 
|---|
| 10 | ;443.1 (PurgeMaster Worklist). | 
|---|
| 11 | ; | 
|---|
| 12 | 410(X) ; | 
|---|
| 13 | N DA,KDA,OK,X1,FORMTYPE,TRANTYPE,REQDATE,REQFY,PRCHDA,PONUM,REQID,TEMPID,BEGDA,ENDA,SITE,PERMDATE,TEMPDATE | 
|---|
| 14 | D UNLOAD | 
|---|
| 15 | F  S DA=$O(^PRCS(410,DA)) Q:'DA!(DA>ENDA)  D | 
|---|
| 16 | . S OK=1 | 
|---|
| 17 | . ;Kill 410 record when no zeroth node | 
|---|
| 18 | . S X=$G(^PRCS(410,DA,0)) I X="" S X="SYSPURG1",^(0)=X,^PRCS(410,"B","SYSPURG1",DA)="" S KDA=DA D KILL443(KDA),KILL410(KDA) Q | 
|---|
| 19 | . S X1=$G(^PRCS(410,DA,1)),FORMTYPE=$P(X,"^",4),TRANTYPE=$P(X,"^",2),REQDATE=$P(X1,"^"),REQID=$P(X,"^"),TEMPID=$P(X,"^",3) | 
|---|
| 20 | . I $P(REQID,"-")'=SITE Q | 
|---|
| 21 | . S PRCHDA=$P($G(^PRCS(410,DA,10)),"^",3),PONUM=$E($P($G(^PRCS(410,DA,4)),"^",5),1,6) S:PONUM]"" PONUM=SITE_"-"_PONUM | 
|---|
| 22 | . ;Ceiling transactions | 
|---|
| 23 | . I TRANTYPE="C" D CEILING Q:'OK  S KDA=DA D KILL443(KDA),KILL410(KDA) Q | 
|---|
| 24 | . ;Kill temp request when request date <= date specified for temps | 
|---|
| 25 | . I REQID=TEMPID,(REQDATE'>TEMPDATE) S KDA=DA D KILL443(KDA),KILL410(KDA) Q | 
|---|
| 26 | . Q:'+REQID | 
|---|
| 27 | . ;Do not delete when date of request > date specified for permanent requests | 
|---|
| 28 | . I REQDATE>PERMDATE Q | 
|---|
| 29 | . ;If no date of request, use the fiscal year from the txn # | 
|---|
| 30 | . I '+REQDATE S REQFY=$P(REQID,"-",2),REQFY=$S(REQFY<70:3,1:2)_REQFY I REQFY>$E(PERMDATE,1,3) Q | 
|---|
| 31 | . ;If no reference to purchase order or if PO referenced does not exist - kill record | 
|---|
| 32 | . I PRCHDA]""!(PONUM]"") D  Q | 
|---|
| 33 | . . I PRCHDA]"",$D(^PRC(442,PRCHDA,0)) D CHKDT(REQDATE,PRCHDA) Q:'OK | 
|---|
| 34 | . . I PONUM]"" S X=$O(^PRC(442,"B",PONUM,0)) I +X,$D(^PRC(442,+X,0)) D CHKDT(REQDATE,+X) Q:'OK | 
|---|
| 35 | . . S KDA=DA D KILL443(KDA),KILL410(KDA) | 
|---|
| 36 | . I PRCHDA="",PONUM="" S KDA=DA D KILL443(KDA),KILL410(KDA) | 
|---|
| 37 | Q | 
|---|
| 38 | 443(X) ; | 
|---|
| 39 | N DA,BEGDA,ENDA,SITE | 
|---|
| 40 | D UNLOAD | 
|---|
| 41 | F  S DA=$O(^PRC(443,DA)) Q:'DA!(DA>ENDA)  D | 
|---|
| 42 | . I '$D(^PRCS(410,DA,0)) S KDA=DA D KILL443(KDA) | 
|---|
| 43 | Q | 
|---|
| 44 | 4101(X) ; | 
|---|
| 45 | N DA,BEGDA,ENDA,SITE,PERMDATE,X0,LDA | 
|---|
| 46 | D UNLOAD | 
|---|
| 47 | F  S DA=$O(^PRCS(410.1,DA)) Q:'DA!(DA>ENDA)  D | 
|---|
| 48 | . S X0=$G(^PRCS(410.1,DA,0)) Q:X0="" | 
|---|
| 49 | . Q:SITE'=$P(X0,"-") | 
|---|
| 50 | . S LDA=$P(X0,"^",3) | 
|---|
| 51 | . Q:LDA>PERMDATE | 
|---|
| 52 | . S DIK="^PRCS(410.1," D ^DIK | 
|---|
| 53 | . K DIK | 
|---|
| 54 | Q | 
|---|
| 55 | UNLOAD ; | 
|---|
| 56 | S BEGDA=$P(X,"-",1),ENDA=+$P(X,"-",2),SITE=$P(X,";",2) | 
|---|
| 57 | S X=$P(X,";",3) | 
|---|
| 58 | I X]"" S TEMPDATE=$P(X,"-",1),PERMDATE=$P(X,"-",2) | 
|---|
| 59 | S DA=BEGDA-.1 | 
|---|
| 60 | Q | 
|---|
| 61 | CHKDT(RDATE,PODA) ; | 
|---|
| 62 | N PODATE | 
|---|
| 63 | ;Use DATE PO ASSIGNED field if defined, else use PO DATE | 
|---|
| 64 | S PODATE=$P($P($G(^PRC(442,PODA,12)),"^",5),".") | 
|---|
| 65 | I +PODATE=0 S PODATE=$P($G(^PRC(442,PODA,1)),"^",15) Q:'+PODATE | 
|---|
| 66 | I '+RDATE D  Q | 
|---|
| 67 | . I REQFY<$E(PODATE,1,3) Q | 
|---|
| 68 | . S OK=0 | 
|---|
| 69 | I $E(RDATE,1,3)<$E(PODATE,1,3) Q | 
|---|
| 70 | S OK=0 | 
|---|
| 71 | Q | 
|---|
| 72 | CEILING ; | 
|---|
| 73 | N ALLOCDT,REQFY | 
|---|
| 74 | S ALLOCDT=$P($G(^PRCS(410,DA,6)),"^",2) | 
|---|
| 75 | I +ALLOCDT'=0,ALLOCDT>PERMDATE S OK=0 Q | 
|---|
| 76 | S REQFY=$P(REQID,"-",2),REQFY=$S(REQFY<70:3,1:2)_REQFY | 
|---|
| 77 | I REQFY>$E(PERMDATE,1,3) S OK=0 Q | 
|---|
| 78 | I PRCHDA]""!(PONUM]"") D | 
|---|
| 79 | . I PRCHDA]"",$D(^PRC(442,PRCHDA,0)) D CHKDT(ALLOCDT,PRCHDA) Q:'OK | 
|---|
| 80 | . I PONUM]"" S X=$O(^PRC(442,"B",PONUM,0)) I +X,$D(^PRC(442,+X,0)) D CHKDT(ALLOCDT,+X) | 
|---|
| 81 | Q | 
|---|
| 82 | KILL410(DA) ; | 
|---|
| 83 | Q:'$D(^PRCS(410,DA,0)) | 
|---|
| 84 | S DIK="^PRCS(410," D ^DIK | 
|---|
| 85 | K DIK | 
|---|
| 86 | D KILL4101 | 
|---|
| 87 | Q | 
|---|
| 88 | KILL443(DA) ; | 
|---|
| 89 | Q:'$D(^PRC(443,DA,0)) | 
|---|
| 90 | S DIK="^PRC(443," D ^DIK | 
|---|
| 91 | K DIK | 
|---|
| 92 | Q | 
|---|
| 93 | KILL4101 ; | 
|---|
| 94 | Q:$G(REQID)="" | 
|---|
| 95 | N DA,ID1,ID2,ID3,ID,LDA | 
|---|
| 96 | S ID1=$P(REQID,"-")_"-"_$P(REQID,"-",2)_"-"_$P(REQID,"-",4) | 
|---|
| 97 | S ID2=$G(PONUM) | 
|---|
| 98 | S ID3=REQID | 
|---|
| 99 | F ID=ID1,ID2,ID3 I ID'="",$D(^PRCS(410.1,"B",ID)) D | 
|---|
| 100 | . S DA=$O(^PRCS(410.1,"B",ID,0)) | 
|---|
| 101 | . Q:DA="" | 
|---|
| 102 | . Q:'$D(^PRCS(410.1,DA,0)) | 
|---|
| 103 | . S LDA=$P(^PRCS(410.1,DA,0),"^",3) | 
|---|
| 104 | . Q:LDA>PERMDATE | 
|---|
| 105 | . S DIK="^PRCS(410.1," D ^DIK | 
|---|
| 106 | . K DIK | 
|---|
| 107 | Q | 
|---|
| 108 | FIND445 ;find invalid records in file 445 | 
|---|
| 109 | S IPIEN=0 | 
|---|
| 110 | F  S IPIEN=$O(^PRCP(445,IPIEN)) Q:IPIEN'>0  D | 
|---|
| 111 | .S IEN=0 | 
|---|
| 112 | .F  S IEN=$O(^PRCP(445,IPIEN,1,IEN)) Q:IEN'>0  D | 
|---|
| 113 | ..Q:'$D(^PRCP(445,IPIEN,1,IEN,7)) | 
|---|
| 114 | ..S TTLI=$P(^PRCP(445,IPIEN,1,IEN,7,0),U,4) | 
|---|
| 115 | ..S ITIEN=0 | 
|---|
| 116 | ..F  S ITIEN=$O(^PRCP(445,IPIEN,1,IEN,7,ITIEN)) Q:ITIEN'>0  D | 
|---|
| 117 | ...I '$D(^PRCS(410,ITIEN)) D KILL445 | 
|---|
| 118 | ..S $P(^PRCP(445,IPIEN,1,IEN,7,0),U,4)=TTLI | 
|---|
| 119 | ..;-leave this with zero amount don't delete? - I TTLI=0 S ^PRCP(445,IPIEN,1,IEN,7) Q | 
|---|
| 120 | ..Q | 
|---|
| 121 | .Q | 
|---|
| 122 | K IPIEN,IEN,ITIEN,TTLI | 
|---|
| 123 | Q | 
|---|
| 124 | KILL445 ;clear the invalid records | 
|---|
| 125 | Q:'$D(^PRCP(445,IPIEN,1,IEN,7,ITIEN,0)) | 
|---|
| 126 | S HLDDA=DA,DA(2)=IPIEN,DA(1)=IEN,DA=ITIEN | 
|---|
| 127 | S DIK="^PRCP(445,"_DA(2)_",1,"_DA(1)_",7," | 
|---|
| 128 | D ^DIK | 
|---|
| 129 | K DIK | 
|---|
| 130 | S TTLI=TTLI-1 | 
|---|
| 131 | S DA=HLDDA | 
|---|
| 132 | Q | 
|---|