[613] | 1 | IBCNEKIT ;DAOU/ESG - PURGE IIV DATA FILES ;11-JUL-2002
|
---|
| 2 | ;;2.0;INTEGRATED BILLING;**184,271,316**;21-MAR-94
|
---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
| 4 | ;
|
---|
| 5 | ; This routine handles the purging of the IIV data stored in the
|
---|
| 6 | ; IIV Transmission Queue file (#365.1) and in the IIV Response file (#365).
|
---|
| 7 | ; User can pick a date range for the purge. Data created within 6 months
|
---|
| 8 | ; cannot be purged. The actual global kills are done by a background
|
---|
| 9 | ; task after hours (8:00pm).
|
---|
| 10 | ;
|
---|
| 11 | EN ;
|
---|
| 12 | NEW STOP,BEGDT,ENDDT,STATLIST
|
---|
| 13 | D INIT I STOP G EXIT ; initialize/calculate default dates
|
---|
| 14 | D BEGDT I STOP G EXIT ; user interface for beginning date
|
---|
| 15 | D ENDDT I STOP G EXIT ; user interface for ending date
|
---|
| 16 | D CONFIRM I STOP G EXIT ; confirmation message/final check
|
---|
| 17 | D QUEUE ; queuing process
|
---|
| 18 | EXIT ;
|
---|
| 19 | Q
|
---|
| 20 | ;
|
---|
| 21 | PURGE ; This procedure is queued to run in the background and does the
|
---|
| 22 | ; actual purging. Variables available from the TaskMan call are:
|
---|
| 23 | ;
|
---|
| 24 | ; STATLIST = list of statuses that are OK to purge
|
---|
| 25 | ; BEGDT = beginning date for purging
|
---|
| 26 | ; ENDDT = ending date for purging
|
---|
| 27 | ;
|
---|
| 28 | N NOW,CACHE
|
---|
| 29 | S NOW=$$NOW^XLFDT
|
---|
| 30 | ;
|
---|
| 31 | ; Check to see if O/C is Cache, if so then cache specific journal code can be used to
|
---|
| 32 | ; enable/disable/enable journaling
|
---|
| 33 | S CACHE=0
|
---|
| 34 | I $P(^%ZOSF("OS"),U)="OpenM-NT" S CACHE=1
|
---|
| 35 | ;
|
---|
| 36 | ; Retain ^XTMP for seven days
|
---|
| 37 | I '$D(^XTMP("IBCNEKIT")) S ^XTMP("IBCNEKIT",0)=U_NOW_U_"Journaling status"
|
---|
| 38 | S $P(^XTMP("IBCNEKIT",0),U)=$$FMADD^XLFDT(NOW,7)
|
---|
| 39 | ;
|
---|
| 40 | I 'CACHE D
|
---|
| 41 | . S ^XTMP("IBCNEKIT",NOW,"STEP 1: NO ACTION")="An O/S conflict prevents journaling from disabling."
|
---|
| 42 | E D
|
---|
| 43 | . ; Set error trap and disable journaling for this one process
|
---|
| 44 | . NEW $ETRAP,$ESTACK,STATUS
|
---|
| 45 | . S $ETRAP="D TRAP^IBCNEKIT"
|
---|
| 46 | . S STATUS=$$CURRENT^%NOJRN
|
---|
| 47 | . S STATUS=$S(STATUS=1:"Enabled",1:"Disabled")
|
---|
| 48 | . S ^XTMP("IBCNEKIT",NOW,"STEP 1: START")="Journaling for this process is "_STATUS_U_$$NOW^XLFDT
|
---|
| 49 | . ;
|
---|
| 50 | . D DISABLE^%NOJRN
|
---|
| 51 | . S STATUS=$$CURRENT^%NOJRN
|
---|
| 52 | . S STATUS=$S(STATUS=1:"Enabled",1:"Disabled")
|
---|
| 53 | . S ^XTMP("IBCNEKIT",NOW,"STEP 2: DISABLE")="Journaling for this process is "_STATUS_U_$$NOW^XLFDT
|
---|
| 54 | ;
|
---|
| 55 | ;
|
---|
| 56 | ; First loop through the IIV Transmission Queue file and delete all
|
---|
| 57 | ; records in the date range whose status is in the list
|
---|
| 58 | ;
|
---|
| 59 | NEW DATE,TQIEN,TQS,HLIEN,DIK,DA,CNT
|
---|
| 60 | S DATE=$O(^IBCN(365.1,"AE",BEGDT),-1),CNT=0
|
---|
| 61 | F S DATE=$O(^IBCN(365.1,"AE",DATE)) Q:'DATE!($P(DATE,".",1)>ENDDT)!$G(ZTSTOP) S TQIEN=0 F S TQIEN=$O(^IBCN(365.1,"AE",DATE,TQIEN)) Q:'TQIEN D Q:$G(ZTSTOP)
|
---|
| 62 | . S CNT=CNT+1
|
---|
| 63 | . I $D(ZTQUEUED),CNT#100=0,$$S^%ZTLOAD() S ZTSTOP=1 Q
|
---|
| 64 | . S TQS=$P($G(^IBCN(365.1,TQIEN,0)),U,4) ; trans queue status
|
---|
| 65 | . I '$F(STATLIST,","_TQS_",") Q ; must be in the list
|
---|
| 66 | . ;
|
---|
| 67 | . ; loop through the HL7 messages multiple and kill any response
|
---|
| 68 | . ; records that are found for this transmission queue entry
|
---|
| 69 | . S HLIEN=0,DIK="^IBCN(365,"
|
---|
| 70 | . F S HLIEN=$O(^IBCN(365.1,TQIEN,2,HLIEN)) Q:'HLIEN D
|
---|
| 71 | .. S DA=$P($G(^IBCN(365.1,TQIEN,2,HLIEN,0)),U,3) I DA D ^DIK
|
---|
| 72 | .. Q
|
---|
| 73 | . ;
|
---|
| 74 | . ; now we can kill the transmission queue entry itself
|
---|
| 75 | . S DA=TQIEN,DIK="^IBCN(365.1," D ^DIK
|
---|
| 76 | . Q
|
---|
| 77 | ;
|
---|
| 78 | ; Check for a stop request
|
---|
| 79 | I $G(ZTSTOP) G PURGEX
|
---|
| 80 | ;
|
---|
| 81 | ; Now we must loop through the IIV Response file itself to purge any
|
---|
| 82 | ; response records that do not have a corresponding transmission
|
---|
| 83 | ; queue entry. These are the unsolicited responses. The status of
|
---|
| 84 | ; these responses is always 'response received' so we don't need to
|
---|
| 85 | ; check the status. For this loop, start from the very beginning of
|
---|
| 86 | ; the file.
|
---|
| 87 | ;
|
---|
| 88 | S DATE="",DIK="^IBCN(365,",CNT=0
|
---|
| 89 | F S DATE=$O(^IBCN(365,"AE",DATE)) Q:'DATE!($P(DATE,".",1)>ENDDT)!$G(ZTSTOP) S DA=0 F S DA=$O(^IBCN(365,"AE",DATE,DA)) Q:'DA D Q:$G(ZTSTOP)
|
---|
| 90 | . S CNT=CNT+1
|
---|
| 91 | . I $D(ZTQUEUED),CNT#100=0,$$S^%ZTLOAD() S ZTSTOP=1 Q
|
---|
| 92 | . ;
|
---|
| 93 | . ; If there is a pointer to the transmission queue file, then we
|
---|
| 94 | . ; should get out of this loop because the purpose of this section
|
---|
| 95 | . ; is to purge those responses with no link to the transmission
|
---|
| 96 | . ; queue file.
|
---|
| 97 | . ;
|
---|
| 98 | . I $P($G(^IBCN(365,DA,0)),U,5) Q
|
---|
| 99 | . D ^DIK
|
---|
| 100 | . Q
|
---|
| 101 | PURGEX ;
|
---|
| 102 | ; Turn journaling back on
|
---|
| 103 | I CACHE D
|
---|
| 104 | . D ENABLE^%NOJRN
|
---|
| 105 | . S STATUS=$$CURRENT^%NOJRN
|
---|
| 106 | . S STATUS=$S(STATUS=1:"Enabled",1:"Disabled")
|
---|
| 107 | . S ^XTMP("IBCNEKIT",NOW,"STEP 3: COMPLETED")="Journaling for this process is "_STATUS_U_$$NOW^XLFDT
|
---|
| 108 | ; Tell TaskManager to delete the task's record
|
---|
| 109 | I $D(ZTQUEUED) S ZTREQ="@"
|
---|
| 110 | Q
|
---|
| 111 | ;
|
---|
| 112 | TRAP ;
|
---|
| 113 | ; Error trap code for Purge^IBCNEKIT that was called by TaskMan
|
---|
| 114 | ; Re-Enable journaling before quitting this routine
|
---|
| 115 | ;
|
---|
| 116 | D ENABLE^%NOJRN
|
---|
| 117 | S STATUS=$$CURRENT^%NOJRN
|
---|
| 118 | S STATUS=$S(STATUS=1:"Enabled",1:"Disabled")
|
---|
| 119 | S ^XTMP("IBCNEKIT",NOW,"STEP 3: ABORTED")="Journaling for this process is "_STATUS_U_$$NOW^XLFDT
|
---|
| 120 | D ^%ZTER
|
---|
| 121 | D UNWIND^%ZTER
|
---|
| 122 | Q
|
---|
| 123 | ;
|
---|
| 124 | INIT ; This procedure calculates the default beginning and ending dates
|
---|
| 125 | ; and displays screen messages about this option to the user.
|
---|
| 126 | ;
|
---|
| 127 | NEW DATE,FOUND,TQIEN,TQS,RPIEN,RPS
|
---|
| 128 | NEW DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT
|
---|
| 129 | ;
|
---|
| 130 | S STOP=0
|
---|
| 131 | ;
|
---|
| 132 | ; This is the list of statuses that are OK to purge
|
---|
| 133 | ; 3=Response Received
|
---|
| 134 | ; 5=Communication Failure
|
---|
| 135 | ; 7=Cancelled
|
---|
| 136 | S STATLIST=",3,5,7,"
|
---|
| 137 | ;
|
---|
| 138 | ; Try to find a beginning date in the IIV Transmission Queue file
|
---|
| 139 | S DATE="",FOUND=0,BEGDT=DT
|
---|
| 140 | F S DATE=$O(^IBCN(365.1,"AE",DATE)) Q:'DATE!FOUND S TQIEN=0 F S TQIEN=$O(^IBCN(365.1,"AE",DATE,TQIEN)) Q:'TQIEN D Q:FOUND
|
---|
| 141 | . S TQS=$P($G(^IBCN(365.1,TQIEN,0)),U,4) ; status
|
---|
| 142 | . I '$F(STATLIST,","_TQS_",") Q
|
---|
| 143 | . S FOUND=1
|
---|
| 144 | . S BEGDT=$P(DATE,".",1)
|
---|
| 145 | . Q
|
---|
| 146 | ;
|
---|
| 147 | ; If not successful, try to find a beginning date in the IIV Response file.
|
---|
| 148 | I 'FOUND D
|
---|
| 149 | . S DATE=""
|
---|
| 150 | . F S DATE=$O(^IBCN(365,"AE",DATE)) Q:'DATE!FOUND S RPIEN=0 F S RPIEN=$O(^IBCN(365,"AE",DATE,RPIEN)) Q:'RPIEN D Q:FOUND
|
---|
| 151 | .. S RPS=$P($G(^IBCN(365,RPIEN,0)),U,6) ; status
|
---|
| 152 | .. I '$F(STATLIST,","_RPS_",") Q
|
---|
| 153 | .. S FOUND=1
|
---|
| 154 | .. S BEGDT=$P(DATE,".",1)
|
---|
| 155 | .. Q
|
---|
| 156 | . Q
|
---|
| 157 | ;
|
---|
| 158 | ; default end date, Today minus 182 days (approx 6 months)
|
---|
| 159 | S ENDDT=$$FMADD^XLFDT(DT,-182)
|
---|
| 160 | ;
|
---|
| 161 | I 'FOUND!(BEGDT>ENDDT) D S STOP=1 G INITX
|
---|
| 162 | . W !!?5,"Purging of IIV data is not possible at this time."
|
---|
| 163 | . I 'FOUND W !?5,"There are no entries in the file that are eligible to be",!?5,"purged or there is no data in the file."
|
---|
| 164 | . E W !?5,"The oldest date in the file is ",$$FMTE^XLFDT(BEGDT,"5Z"),".",!?5,"Data cannot be purged unless it is at least 6 months old."
|
---|
| 165 | . W ! S DIR(0)="E" D ^DIR K DIR
|
---|
| 166 | . Q
|
---|
| 167 | ;
|
---|
| 168 | ; At this point, we know that there are some entries eligible for
|
---|
| 169 | ; purging. Display a message to the user about this option.
|
---|
| 170 | W @IOF
|
---|
| 171 | W !?3,"Purge Electronic Insurance Identification and Verification (IIV) Data Files"
|
---|
| 172 | W !!!," This option will allow you to purge data from the IIV Response File (#365)"
|
---|
| 173 | W !," and the IIV Transmission Queue File (#365.1). The data must be at least six"
|
---|
| 174 | W !," months old before it can be purged. Only insurance transactions that have a"
|
---|
| 175 | W !," transmission status of ""Response Received"", ""Communication Failure"", or"
|
---|
| 176 | W !," ""Cancelled"" may be purged. You will be allowed to select a date range for"
|
---|
| 177 | W !," this purging. The default beginning date will be the date of the oldest"
|
---|
| 178 | W !," eligible record in the system. The default ending date will be six months"
|
---|
| 179 | W !," ago from today's date. You may modify this default date range. However, you"
|
---|
| 180 | W !," may not select an ending date that is more recent than six months ago."
|
---|
| 181 | W !!
|
---|
| 182 | INITX ;
|
---|
| 183 | Q
|
---|
| 184 | ;
|
---|
| 185 | BEGDT ; This procedure captures the beginning date from the user.
|
---|
| 186 | NEW DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT
|
---|
| 187 | S DIR(0)="DOA^"_BEGDT_":"_ENDDT_":AEX"
|
---|
| 188 | S DIR("A")="Enter the purge begin date: "
|
---|
| 189 | S DIR("B")=$$FMTE^XLFDT(BEGDT,"5Z")
|
---|
| 190 | S DIR("?")="This response must be a date between "_$$FMTE^XLFDT(BEGDT,"5Z")_" and "_$$FMTE^XLFDT(ENDDT,"5Z")_"."
|
---|
| 191 | D ^DIR K DIR
|
---|
| 192 | I $D(DIRUT)!'Y S STOP=1 G BEGDTX
|
---|
| 193 | S BEGDT=Y
|
---|
| 194 | BEGDTX ;
|
---|
| 195 | Q
|
---|
| 196 | ;
|
---|
| 197 | ENDDT ; This procedure captures the ending date from the user.
|
---|
| 198 | NEW DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT
|
---|
| 199 | W !
|
---|
| 200 | S DIR(0)="DOA^"_BEGDT_":"_ENDDT_":AEX"
|
---|
| 201 | S DIR("A")=" Enter the purge end date: "
|
---|
| 202 | S DIR("B")=$$FMTE^XLFDT(ENDDT,"5Z")
|
---|
| 203 | S DIR("?")="This response must be a date between "_$$FMTE^XLFDT(BEGDT,"5Z")_" and "_$$FMTE^XLFDT(ENDDT,"5Z")_"."
|
---|
| 204 | D ^DIR K DIR
|
---|
| 205 | I $D(DIRUT)!'Y S STOP=1 G ENDDTX
|
---|
| 206 | S ENDDT=Y
|
---|
| 207 | ENDDTX ;
|
---|
| 208 | Q
|
---|
| 209 | ;
|
---|
| 210 | CONFIRM ; This procedure displays a confirmation message to the user and
|
---|
| 211 | ; asks if it is OK to proceed with the purge.
|
---|
| 212 | NEW DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT
|
---|
| 213 | W !!!," You want to purge all IIV data created between "
|
---|
| 214 | W $$FMTE^XLFDT(BEGDT,"5Z")," and ",$$FMTE^XLFDT(ENDDT,"5Z"),"."
|
---|
| 215 | W !
|
---|
| 216 | S DIR(0)="YO",DIR("A")=" OK to continue"
|
---|
| 217 | S DIR("B")="NO"
|
---|
| 218 | D ^DIR K DIR
|
---|
| 219 | I 'Y S STOP=1
|
---|
| 220 | CONFX ;
|
---|
| 221 | Q
|
---|
| 222 | ;
|
---|
| 223 | QUEUE ; This procedure queues the purge process for later at night.
|
---|
| 224 | ; The concept for queuing the purge came from the insurance buffer
|
---|
| 225 | ; purge routine, IBCNBPG. That purge process is also hard-coded to
|
---|
| 226 | ; be run at 8:00 PM just like this one is.
|
---|
| 227 | ;
|
---|
| 228 | NEW ZTRTN,ZTDESC,ZTDTH,ZTIO,ZTUCI,ZTCPU,ZTPRI,ZTSAVE,ZTKIL,ZTSYNC,ZTSK
|
---|
| 229 | NEW DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT
|
---|
| 230 | S ZTRTN="PURGE^IBCNEKIT" ; TaskMan task entry point
|
---|
| 231 | S ZTDESC="Purge IIV Data" ; Task description
|
---|
| 232 | S ZTDTH=DT_".20" ; start it at 8:00 PM tonight
|
---|
| 233 | S ZTIO=""
|
---|
| 234 | S ZTSAVE("BEGDT")=""
|
---|
| 235 | S ZTSAVE("ENDDT")=""
|
---|
| 236 | S ZTSAVE("STATLIST")=""
|
---|
| 237 | D ^%ZTLOAD
|
---|
| 238 | I $G(ZTSK) W !!," Task# ",ZTSK," has been scheduled to purge the IIV data tonight at 8:00 PM."
|
---|
| 239 | E W !!," TaskManager could not schedule this task.",!," Contact IRM for technical assistance."
|
---|
| 240 | W ! S DIR(0)="E" D ^DIR K DIR
|
---|
| 241 | QUEUEX ;
|
---|
| 242 | Q
|
---|