LA7PURG ;VA/DALOI/JMC - Purge Lab Messaging Interface Messages ;JUL 06, 2010 3:14 PM
;;5.2;AUTOMATED LAB INSTRUMENTS;**27,64,1027**;NOV 01, 1997
;
; This routine purges messages and checks file intregrity for Lab Messaging.
Q
;
;
EN ; Entry point from taskman
D IC^LA7CHKF
D PURGE,PSM,PLPO
S X=$$LACHK^LA7CHKF
Q
;
;
PURGE ; purge messages previous to today
N DA,DIK,I,LA7CFG,LA7DA,LA7DAT,LA7ROOT,LA7Q,X,Y
;
; Get each configuration's grace period for messages.
; Determine cut-off date for purging this configuration.
S I=0
F S I=$O(^LAHM(62.48,I)) Q:'I D
. S X=$P($G(^LAHM(62.48,I,0)),"^",6)
. I 'X S X=3 ; If missing, default to 3 days.
. S LA7DAT(I)=$$HTFM^XLFDT($$HADD^XLFDT($H,-X),1)
S LA7DAT=0
;
F S LA7DAT=$O(^LAHM(62.49,"AD",LA7DAT)) Q:'LA7DAT!(LA7DAT=DT) D
. ; Set flag if "problem" messages for this date are purgeable --> have been removed from XTMP.
. S LA7DAT(0)=$G(^XTMP("LA7ERR^"_LA7DAT,0),0)
. S LA7DA=0
. F S LA7DA=$O(^LAHM(62.49,"AD",LA7DAT,LA7DA)) Q:'LA7DA D
. . L +^LAHM(62.49,LA7DA):1
. . I $T D
. . . I LA7DAT'=$P($P($G(^LAHM(62.49,LA7DA,0)),"^",5),".") D Q
. . . . ; Date in cross-reference does not match field #4, remove x-ref.
. . . . K ^LAHM(62.49,"AD",LA7DAT,LA7DA)
. . . ; Don't purge if problem message and still in XTMP global.
. . . I LA7DAT(0),$P(^LAHM(62.49,LA7DA,0),"^",3)'="X" Q
. . . ; Get configuration for this message.
. . . S LA7CFG=+$G(^LAHM(62.49,LA7DA,.5))
. . . ; If message hasn't reached purge date --> skip.
. . . I LA7CFG,LA7DAT'<$G(LA7DAT(LA7CFG)) Q
. . . S DIK="^LAHM(62.49,",DA=LA7DA D ^DIK
. . L -^LAHM(62.49,LA7DA)
Q
;
;
PSM ; Purge shipping manifests file (#62.8)
;
; Check each manifest to determine if accessions on manifest have all
; been purged from file #68.
;
; If over 10000 entries purged from #62.85 then quit and pickup next
; session. Avoid performance and journaling issues.
N DA,DIK,LA7628,LA7CNT
S (LA7628,LA7CNT)=0,DIK="^LAHM(62.8,"
F S LA7628=$O(^LAHM(62.8,LA7628)) Q:'LA7628 D Q:LA7CNT>10000
. I '$$CHK628(LA7628) Q
. D P6285
. S DA=LA7628 D ^DIK
Q
;
;
PLPO ; Purge Lab Pending Orders file (#69.6)
;
; Check each order to determine if order can be purged.
;
; If over 5000 entries purged then quit and pickup next session.
; Avoid performance and journaling issues.
;
N DA,DIK,LA7696,LA7CNT,LA7COFF,LA7STAT
;
S DIK="^LRO(69.6,",(LA7696,LA7CNT)=0
; Cutoff dates
S LA7COFF(1)=$$FMADD^XLFDT(DT,-365),LA7COFF(2)=$$FMADD^XLFDT(DT,-730)
; Results sent status ien
S LA7STAT=$$FIND1^DIC(64.061,"","OMX","Results/data Received","","I $P(^LAB(64.061,Y,0),U,7)=""U""")
F S LA7696=$O(^LRO(69.6,LA7696)) Q:'LA7696 D Q:LA7CNT>5000
. I '$$CHK696(LA7696,.LA7COFF,LA7STAT) Q
. S LA7CNT=LA7CNT+1,DA=LA7696 D ^DIK
Q
;
;
CHK628(LA7628) ; If all accessions have been purged then safe to purge manifest
; and associated events (#62.85)
;
; Call with LA7628 = ien of manifest in #62.8
;
; Returns OK = 1(yes)/ 0(no) to purge
;
N LRUID,OK
S OK=1,LRUID=""
F S LRUID=$O(^LAHM(62.8,LA7628,10,"UID",LRUID)) Q:LRUID="" I $$CHECKUID^LRWU4(LRUID) S OK=0 Q
Q OK
;
;
P6285 ; Purge related entries in shipping activity log (#62.85)
;
N DA,DIK,LA7SM,LRUID
S LA7SM=$P(^LAHM(62.8,LA7628,0),"^"),LRUID="",DIK="^LAHM(62.85,"
;
; Purge entries in 62.85 relating to accessions (UID) on manifest
F S LRUID=$O(^LAHM(62.8,LA7628,10,"UID",LRUID)) Q:LRUID="" D
. S DA=0
. F S DA=$O(^LAHM(62.85,"AM",LRUID,LA7SM,DA)) Q:'DA D ^DIK S LA7CNT=LA7CNT+1
;
; Purge entries in 62.85 relating to manifest
S DA=0
F S DA=$O(^LAHM(62.85,"B",LA7SM,DA)) Q:'DA D ^DIK S LA7CNT=LA7CNT+1
Q
;
;
CHK696(LA7696,LA7COFF,LA7SPST) ; Check if order safe to purge
;
; Call with LA7696 = ien of order in #69.6
; LA7COFF = array of cutoff FileMan dates.
; LA7SPST = ien of specimen status Results/data Received
;
; Returns OK = 1(yes)/ 0(no) to purge
;
N LAX,OK
S OK=0,LAX=$G(^LRO(69.6,LA7696,1))
;
; Check date order completed
I $P(LAX,"^",7),$P(LAX,"^",7)<LA7COFF(1) S OK=1
;
; Check date order received/tranmsitted
I 'OK D
. I $P(LAX,"^",4),$P(LAX,"^",4)<LA7COFF(2) S OK=1 Q
. I $P(LAX,"^",5),$P(LAX,"^",5)<LA7COFF(2) S OK=1 Q
;
; Check date order received and specimen status
I 'OK,$P(LAX,"^",5),$P(LAX,"^",5)<LA7COFF(1) D
. S X=$P($G(^LRO(69.6,LA7696,0)),"^",10) ; specimen status
. I LA7SPST,X=LA7SPST S OK=1
;
Q OK
LA7PURG ;VA/DALOI/JMC - Purge Lab Messaging Interface Messages ;JUL 06, 2010 3:14 PM
+1 ;;5.2;AUTOMATED LAB INSTRUMENTS;**27,64,1027**;NOV 01, 1997
+2 ;
+3 ; This routine purges messages and checks file intregrity for Lab Messaging.
+4 QUIT
+5 ;
+6 ;
EN ; Entry point from taskman
+1 DO IC^LA7CHKF
+2 DO PURGE
DO PSM
DO PLPO
+3 SET X=$$LACHK^LA7CHKF
+4 QUIT
+5 ;
+6 ;
PURGE ; purge messages previous to today
+1 NEW DA,DIK,I,LA7CFG,LA7DA,LA7DAT,LA7ROOT,LA7Q,X,Y
+2 ;
+3 ; Get each configuration's grace period for messages.
+4 ; Determine cut-off date for purging this configuration.
+5 SET I=0
+6 FOR
SET I=$ORDER(^LAHM(62.48,I))
IF 'I
QUIT
Begin DoDot:1
+7 SET X=$PIECE($GET(^LAHM(62.48,I,0)),"^",6)
+8 ; If missing, default to 3 days.
IF 'X
SET X=3
+9 SET LA7DAT(I)=$$HTFM^XLFDT($$HADD^XLFDT($HOROLOG,-X),1)
End DoDot:1
+10 SET LA7DAT=0
+11 ;
+12 FOR
SET LA7DAT=$ORDER(^LAHM(62.49,"AD",LA7DAT))
IF 'LA7DAT!(LA7DAT=DT)
QUIT
Begin DoDot:1
+13 ; Set flag if "problem" messages for this date are purgeable --> have been removed from XTMP.
+14 SET LA7DAT(0)=$GET(^XTMP("LA7ERR^"_LA7DAT,0),0)
+15 SET LA7DA=0
+16 FOR
SET LA7DA=$ORDER(^LAHM(62.49,"AD",LA7DAT,LA7DA))
IF 'LA7DA
QUIT
Begin DoDot:2
+17 LOCK +^LAHM(62.49,LA7DA):1
+18 IF $TEST
Begin DoDot:3
+19 IF LA7DAT'=$PIECE($PIECE($GET(^LAHM(62.49,LA7DA,0)),"^",5),".")
Begin DoDot:4
+20 ; Date in cross-reference does not match field #4, remove x-ref.
+21 KILL ^LAHM(62.49,"AD",LA7DAT,LA7DA)
End DoDot:4
QUIT
+22 ; Don't purge if problem message and still in XTMP global.
+23 IF LA7DAT(0)
IF $PIECE(^LAHM(62.49,LA7DA,0),"^",3)'="X"
QUIT
+24 ; Get configuration for this message.
+25 SET LA7CFG=+$GET(^LAHM(62.49,LA7DA,.5))
+26 ; If message hasn't reached purge date --> skip.
+27 IF LA7CFG
IF LA7DAT'<$GET(LA7DAT(LA7CFG))
QUIT
+28 SET DIK="^LAHM(62.49,"
SET DA=LA7DA
DO ^DIK
End DoDot:3
+29 LOCK -^LAHM(62.49,LA7DA)
End DoDot:2
End DoDot:1
+30 QUIT
+31 ;
+32 ;
PSM ; Purge shipping manifests file (#62.8)
+1 ;
+2 ; Check each manifest to determine if accessions on manifest have all
+3 ; been purged from file #68.
+4 ;
+5 ; If over 10000 entries purged from #62.85 then quit and pickup next
+6 ; session. Avoid performance and journaling issues.
+7 NEW DA,DIK,LA7628,LA7CNT
+8 SET (LA7628,LA7CNT)=0
SET DIK="^LAHM(62.8,"
+9 FOR
SET LA7628=$ORDER(^LAHM(62.8,LA7628))
IF 'LA7628
QUIT
Begin DoDot:1
+10 IF '$$CHK628(LA7628)
QUIT
+11 DO P6285
+12 SET DA=LA7628
DO ^DIK
End DoDot:1
IF LA7CNT>10000
QUIT
+13 QUIT
+14 ;
+15 ;
PLPO ; Purge Lab Pending Orders file (#69.6)
+1 ;
+2 ; Check each order to determine if order can be purged.
+3 ;
+4 ; If over 5000 entries purged then quit and pickup next session.
+5 ; Avoid performance and journaling issues.
+6 ;
+7 NEW DA,DIK,LA7696,LA7CNT,LA7COFF,LA7STAT
+8 ;
+9 SET DIK="^LRO(69.6,"
SET (LA7696,LA7CNT)=0
+10 ; Cutoff dates
+11 SET LA7COFF(1)=$$FMADD^XLFDT(DT,-365)
SET LA7COFF(2)=$$FMADD^XLFDT(DT,-730)
+12 ; Results sent status ien
+13 SET LA7STAT=$$FIND1^DIC(64.061,"","OMX","Results/data Received","","I $P(^LAB(64.061,Y,0),U,7)=""U""")
+14 FOR
SET LA7696=$ORDER(^LRO(69.6,LA7696))
IF 'LA7696
QUIT
Begin DoDot:1
+15 IF '$$CHK696(LA7696,.LA7COFF,LA7STAT)
QUIT
+16 SET LA7CNT=LA7CNT+1
SET DA=LA7696
DO ^DIK
End DoDot:1
IF LA7CNT>5000
QUIT
+17 QUIT
+18 ;
+19 ;
CHK628(LA7628) ; If all accessions have been purged then safe to purge manifest
+1 ; and associated events (#62.85)
+2 ;
+3 ; Call with LA7628 = ien of manifest in #62.8
+4 ;
+5 ; Returns OK = 1(yes)/ 0(no) to purge
+6 ;
+7 NEW LRUID,OK
+8 SET OK=1
SET LRUID=""
+9 FOR
SET LRUID=$ORDER(^LAHM(62.8,LA7628,10,"UID",LRUID))
IF LRUID=""
QUIT
IF $$CHECKUID^LRWU4(LRUID)
SET OK=0
QUIT
+10 QUIT OK
+11 ;
+12 ;
P6285 ; Purge related entries in shipping activity log (#62.85)
+1 ;
+2 NEW DA,DIK,LA7SM,LRUID
+3 SET LA7SM=$PIECE(^LAHM(62.8,LA7628,0),"^")
SET LRUID=""
SET DIK="^LAHM(62.85,"
+4 ;
+5 ; Purge entries in 62.85 relating to accessions (UID) on manifest
+6 FOR
SET LRUID=$ORDER(^LAHM(62.8,LA7628,10,"UID",LRUID))
IF LRUID=""
QUIT
Begin DoDot:1
+7 SET DA=0
+8 FOR
SET DA=$ORDER(^LAHM(62.85,"AM",LRUID,LA7SM,DA))
IF 'DA
QUIT
DO ^DIK
SET LA7CNT=LA7CNT+1
End DoDot:1
+9 ;
+10 ; Purge entries in 62.85 relating to manifest
+11 SET DA=0
+12 FOR
SET DA=$ORDER(^LAHM(62.85,"B",LA7SM,DA))
IF 'DA
QUIT
DO ^DIK
SET LA7CNT=LA7CNT+1
+13 QUIT
+14 ;
+15 ;
CHK696(LA7696,LA7COFF,LA7SPST) ; Check if order safe to purge
+1 ;
+2 ; Call with LA7696 = ien of order in #69.6
+3 ; LA7COFF = array of cutoff FileMan dates.
+4 ; LA7SPST = ien of specimen status Results/data Received
+5 ;
+6 ; Returns OK = 1(yes)/ 0(no) to purge
+7 ;
+8 NEW LAX,OK
+9 SET OK=0
SET LAX=$GET(^LRO(69.6,LA7696,1))
+10 ;
+11 ; Check date order completed
+12 IF $PIECE(LAX,"^",7)
IF $PIECE(LAX,"^",7)<LA7COFF(1)
SET OK=1
+13 ;
+14 ; Check date order received/tranmsitted
+15 IF 'OK
Begin DoDot:1
+16 IF $PIECE(LAX,"^",4)
IF $PIECE(LAX,"^",4)<LA7COFF(2)
SET OK=1
QUIT
+17 IF $PIECE(LAX,"^",5)
IF $PIECE(LAX,"^",5)<LA7COFF(2)
SET OK=1
QUIT
End DoDot:1
+18 ;
+19 ; Check date order received and specimen status
+20 IF 'OK
IF $PIECE(LAX,"^",5)
IF $PIECE(LAX,"^",5)<LA7COFF(1)
Begin DoDot:1
+21 ; specimen status
SET X=$PIECE($GET(^LRO(69.6,LA7696,0)),"^",10)
+22 IF LA7SPST
IF X=LA7SPST
SET OK=1
End DoDot:1
+23 ;
+24 QUIT OK