| [613] | 1 | LRBLAUD1 ;TOG/CYM   -AUDIT TRAIL UTILITY ;4/30/97   14:00 | 
|---|
|  | 2 | ;;5.2;LAB SERVICE;**90,247**;Sep 27, 1994 | 
|---|
|  | 3 | ;Per VHA Directive 97-033 this routine should not be modified.  Medical Device # BK970021 | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | ; This routine is called by file 65 edit template LRBLIDTM | 
|---|
|  | 6 | ; | 
|---|
|  | 7 | ; When a transfusion of TRANSFUSE is edited, the routine | 
|---|
|  | 8 | ; gathers all information that is deleted along with the | 
|---|
|  | 9 | ; disposition, puts into an array for later addition to the | 
|---|
|  | 10 | ; audit trail | 
|---|
|  | 11 | ; | 
|---|
|  | 12 | ; Utility also allows for entries in the MODIFY TO/FROM field | 
|---|
|  | 13 | ; to go onto the audit trail | 
|---|
|  | 14 | ; | 
|---|
|  | 15 | DISP ; When editing Unit Disposition, gets | 
|---|
|  | 16 | ; all associated data in files 65 and 63 that are also cleaned up | 
|---|
|  | 17 | ; and saves variables in the case the Disposition is Edited and the | 
|---|
|  | 18 | ; appropriate patient's transfusion record needs to be cleaned up. | 
|---|
|  | 19 | ; If so, these entries are then added to the audit trail. | 
|---|
|  | 20 | S LRDISP=$G(^LRD(65,DA,4)),LRDSP=$P(LRDISP,U),LRDISDT=$P(LRDISP,U,2),LRPERS=$P(LRDISP,U,3),LRDIPD=$P(LRDISP,U,4) | 
|---|
|  | 21 | S LRPTRANS=$G(^LRD(65,DA,6)),LRPTR=$P(LRPTRANS,U),LRPHYS=$P(LRPTRANS,U,2),LRTS=$P(LRPTRANS,U,3),LRREC=$P(LRPTRANS,U,4),LRREACT=$P(LRPTRANS,U,5) | 
|---|
|  | 22 | S LRPROVN=$P(LRPTRANS,U,6),LRTSNUM=$P(LRPTRANS,U,7),LRRXTYPE=$P(LRPTRANS,U,8) I LRPTR]"" D | 
|---|
|  | 23 | . S LRPTREC=$G(^LR(LRPTR,1.6,LRREC,0)),LRTRDT=$P(LRPTREC,U),LRCOMP=$P(LRPTREC,U,2),LRCOMPID=$P(LRPTREC,U,3),LRENTP=$P(LRPTREC,U,4),LRUNABO=$P(LRPTREC,U,5) | 
|---|
|  | 24 | . S LRUNRH=$P(LRPTREC,U,6),LRPOOL=$P(LRPTREC,U,7),LRRECRX=$P(LRPTREC,U,8),LROLD=$P(LRPTREC,U,9),LRVOL=$P(LRPTREC,U,10),LRTYPE=$P(LRPTREC,U,11) | 
|---|
|  | 25 | Q | 
|---|
|  | 26 | ; | 
|---|
|  | 27 | DISP1 ; Actual code that adds data removed from the system when a | 
|---|
|  | 28 | ; disposition is deleted when using the option LRBLSED. | 
|---|
|  | 29 | Q:$D(^LRD(65,DA,4)) | 
|---|
|  | 30 | S O=$G(LRDISDT),Z="65,4.2" D AUDIT | 
|---|
|  | 31 | S O=$G(LRPERS),Z="65,4.3" I O]"" S X="Orig Entry Deleted" D EN^LRUD | 
|---|
|  | 32 | S O=$G(LRDIPD),Z="65,4.4" D AUDIT | 
|---|
|  | 33 | S O=$G(LRPTR),Z="65,6.1" D AUDIT | 
|---|
|  | 34 | S O=$G(LRPHYS),Z="65,6.2" D AUDIT | 
|---|
|  | 35 | S O=$G(LRTS),Z="65,6.3" D AUDIT | 
|---|
|  | 36 | S O=$G(LRREC),Z="65,6.4" D AUDIT | 
|---|
|  | 37 | S O=$G(LRREACT),Z="65,6.5" D AUDIT | 
|---|
|  | 38 | S O=$G(LRPROVN),Z="65,6.6" D AUDIT | 
|---|
|  | 39 | S O=$G(LRTSNUM),Z="65,6.7" D AUDIT | 
|---|
|  | 40 | S O=$G(LRRXTYPE),Z="65,6.8" D AUDIT | 
|---|
|  | 41 | Q:'$D(LRPTR)  Q:LRPTR']"" | 
|---|
|  | 42 | S O=$G(LRTRDT),Z="63.017,.01" S DA(1)=LRPTR,DA=LRREC D AUDIT | 
|---|
|  | 43 | S O=$G(LRCOMP),Z="63.017,.02" D AUDIT | 
|---|
|  | 44 | S O=$G(LRCOMPID),Z="63.017,.03" D AUDIT | 
|---|
|  | 45 | S O=$G(LRENTP),Z="63.017,.04" D AUDIT | 
|---|
|  | 46 | S O=$G(LRUNABO),Z="63.017,.05" D AUDIT | 
|---|
|  | 47 | S O=$G(LRUNRH),Z="63.017,.06" D AUDIT | 
|---|
|  | 48 | S O=$G(LRPOOL),Z="63.017,.07" D AUDIT | 
|---|
|  | 49 | S O=$G(LRRECRX),Z="63.017,.08" D AUDIT | 
|---|
|  | 50 | S O=$G(LROLD),Z="63.017,.09" D AUDIT | 
|---|
|  | 51 | S O=$G(LRVOL),Z="63.017,.1" D AUDIT | 
|---|
|  | 52 | S O=$G(LRTYPE),Z="63.017,.11" D AUDIT | 
|---|
|  | 53 | Q | 
|---|
|  | 54 | ; | 
|---|
|  | 55 | AUDIT I O]"" S X="Deleted" D EN^LRUD | 
|---|
|  | 56 | Q | 
|---|
|  | 57 | ; | 
|---|
|  | 58 | K ; Kills variables created during editing of a disposition | 
|---|
|  | 59 | K LRIEN,NODE2,LRDISDT,LRDISP,LRDSP,LRDIST,LRPERS,LRPTRANS,LRDIPD,LRPTR,LRPHYS,LRTS,LRREC,LRREACT,LRPROVN,LRTSNUM,LRRXTYPE,LRPTREC,LRTRDT,LRCOMP,LRCOMPID,LRENTP,LRUNABO,LRUNRH,LRPOOL,LRRECRX,LROLD,LRVOL,LRTYPE,MOD,BEGMOD,AFTMOD,BEGM | 
|---|
|  | 60 | Q | 
|---|
|  | 61 | ; | 
|---|
|  | 62 | DISP4 ; Actual code used to evaluate when the DISPOSITION field (4.1) | 
|---|
|  | 63 | ; is edited and the software edits/deletes associated | 
|---|
|  | 64 | ; fields.  Each field is evaluated and if there is a change | 
|---|
|  | 65 | ; the changes are captured on the audit trail. | 
|---|
|  | 66 | S LRM=$G(^LRD(65,DA,4)) | 
|---|
|  | 67 | S O=$G(LRDISDT),X=$P(LRM,U,2),Z="65,4.2" D CHECK | 
|---|
|  | 68 | S O=$G(LRPERS),X=DUZ,Z="65,4.3" D CHECK | 
|---|
|  | 69 | S O=$G(LRDIPD),X=$P(LRM,U,4),Z="65,4.4" D CHECK | 
|---|
|  | 70 | S LRM=$G(^LRD(65,DA,6)) | 
|---|
|  | 71 | S O=$G(LRPTR),X=$P(LRM,U),Z="65,6.1" D CHECK | 
|---|
|  | 72 | S O=$G(LRPHYS),X=$P(LRM,U,2),Z="65,6.2" D CHECK | 
|---|
|  | 73 | S O=$G(LRTS),X=$P(LRM,U,3),Z="65,6.3" D CHECK | 
|---|
|  | 74 | S O=$G(LRREC),X=$P(LRM,U,4),Z="65,6.4" D CHECK | 
|---|
|  | 75 | S O=$G(LRREACT),X=$P(LRM,U,5),Z="65,6.5" D CHECK | 
|---|
|  | 76 | S O=$G(LRPROVN),X=$P(LRM,U,6),Z="65,6.6" D CHECK | 
|---|
|  | 77 | S O=$G(LRTSNUM),X=$P(LRM,U,7),Z="65,6.7" D CHECK | 
|---|
|  | 78 | S O=$G(LRRXTYPE),X=$P(LRM,U,8),Z="65,6.8" D CHECK | 
|---|
|  | 79 | I LRPTR]"" D DISP5 | 
|---|
|  | 80 | Q | 
|---|
|  | 81 | ; | 
|---|
|  | 82 | DISP5 ; If Disposition is edited to TRANSFUSE, routine LRBLJED creates | 
|---|
|  | 83 | ; a patient transfusion record in file 63.  Following code adds | 
|---|
|  | 84 | ; those changes to the audit trail. | 
|---|
|  | 85 | S LRM=$G(^LR(LRPTR,1.6,LRREC,0)) | 
|---|
|  | 86 | S O=$G(LRTRDT),X=$P(LRM,U),Z="63.017,.01" S DA(1)=LRPTR,DA=LRREC D CHECK | 
|---|
|  | 87 | S O=$G(LRCOMP),X=$P(LRM,U,2),Z="63.017,.02" D CHECK | 
|---|
|  | 88 | S O=$G(LRCOMPID),X=$P(LRM,U,3),Z="63.017,.03" D CHECK | 
|---|
|  | 89 | S O=$G(LRENTP),X=$P(LRM,U,4),Z="63.017,.04" D CHECK | 
|---|
|  | 90 | S O=$G(LRUNABO),X=$P(LRM,U,5),Z="63.017,.05" D CHECK | 
|---|
|  | 91 | S O=$G(LRUNRH),X=$P(LRM,U,6),Z="63.017,.06" D CHECK | 
|---|
|  | 92 | S O=$G(LRPOOL),X=$P(LRM,U,7),Z="63.017,.07" D CHECK | 
|---|
|  | 93 | S O=$G(LRRECRX),X=$P(LRM,U,8),Z="63.017,.08" D CHECK | 
|---|
|  | 94 | S O=$G(LROLD),X=$P(LRM,U,9),Z="63.017,.09" D CHECK | 
|---|
|  | 95 | S O=$G(LRVOL),X=$P(LRM,U,10),Z="63.017,.1" D CHECK | 
|---|
|  | 96 | S O=$G(LRTYPE),X=$P(LRM,U,11),Z="63.017,.11" D CHECK | 
|---|
|  | 97 | Q | 
|---|
|  | 98 | ; | 
|---|
|  | 99 | MOD ; At the beginning of an edit session, collects all data | 
|---|
|  | 100 | ; in the MODIFIED TO/FROM field multiple, puts into a | 
|---|
|  | 101 | ; BEGM() array and counts total for later comparison. | 
|---|
|  | 102 | S (MOD,BEGMOD)=0 | 
|---|
|  | 103 | F  S MOD=$O(^LRD(65,LRIEN,9,MOD)) Q:MOD'>0  S BEGMOD=BEGMOD+1,BEGM(LRIEN,9,MOD)=^LRD(65,LRIEN,9,MOD,0) | 
|---|
|  | 104 | Q | 
|---|
|  | 105 | ; | 
|---|
|  | 106 | MOD2 ; If a disposition of MODIFY is deleted, collects all data in the | 
|---|
|  | 107 | ; MODIFY TO/FROM field multiple (from the BEGM() array), and adds | 
|---|
|  | 108 | ; to the audit trail before the software deletes the entries. | 
|---|
|  | 109 | Q:'$D(BEGM) | 
|---|
|  | 110 | S DA(1)=DA,MOD=0 F  S MOD=$O(^LRD(65,LRIEN,9,MOD)) Q:MOD'>0  D | 
|---|
|  | 111 | . S LRM=^LRD(65,LRIEN,9,MOD,0) | 
|---|
|  | 112 | . S O=$P(LRM,U),Z="65.091,.01" D AUDIT | 
|---|
|  | 113 | . S O=$P(LRM,U,2),Z="65.091,.02" D AUDIT | 
|---|
|  | 114 | . S O=$P(LRM,U,3),Z="65.091,.03" D AUDIT | 
|---|
|  | 115 | Q | 
|---|
|  | 116 | ; | 
|---|
|  | 117 | MOD3 ; Counts MODIFY TO/FROM entries after unit is modified. | 
|---|
|  | 118 | ; If total entries after modification < total entries before | 
|---|
|  | 119 | ; modification puts deleted entry onto the audit trail | 
|---|
|  | 120 | S (MOD,AFTMOD)=0 | 
|---|
|  | 121 | F  S MOD=$O(^LRD(65,LRIEN,9,MOD)) Q:MOD'>0  S AFTMOD=AFTMOD+1,AFTM(LRIEN,9,MOD)=^LRD(65,LRIEN,9,MOD,0) | 
|---|
|  | 122 | I AFTMOD<BEGMOD D | 
|---|
|  | 123 | . S AUD=0 | 
|---|
|  | 124 | . F  S AUD=$O(BEGM(LRIEN,9,AUD)) Q:AUD'>0  D | 
|---|
|  | 125 | .. I '$D(^LRD(65,LRIEN,9,AUD)) D | 
|---|
|  | 126 | ... S LRM=BEGM(LRIEN,9,AUD) | 
|---|
|  | 127 | ... S O=$P(LRM,U),Z="65.091,.01" D AUDIT | 
|---|
|  | 128 | ... S O=$P(LRM,U,2),Z="65.091,.02" D AUDIT | 
|---|
|  | 129 | ... S O=$P(LRM,U,3),Z="65.091,.03" D AUDIT | 
|---|
|  | 130 | I AFTMOD>BEGMOD D | 
|---|
|  | 131 | . S AUD=0 | 
|---|
|  | 132 | . F  S AUD=$O(AFTM(LRIEN,9,AUD)) Q:AUD'>0  D | 
|---|
|  | 133 | .. I '$D(BEGM(LRIEN,9,AUD)) D | 
|---|
|  | 134 | ... S LRM=^LRD(65,LRIEN,9,AUD,0) | 
|---|
|  | 135 | ... S X=$P(LRM,U),Z="65.091,.01",O="" D EN^LRUD | 
|---|
|  | 136 | ... S X=$P(LRM,U,2),Z="65.091,.02",O="" D EN^LRUD | 
|---|
|  | 137 | Q | 
|---|
|  | 138 | CHECK I O'=X D EN^LRUD | 
|---|
|  | 139 | Q | 
|---|