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
|
---|