| [623] | 1 | RGEVPRG ;BAY/ALS-OPTIONS TO PURGE MPI/PD EXCEPTIONS ;08/23/99 | 
|---|
|  | 2 | ;;1.0;CLINICAL INFO RESOURCE NETWORK;**3,12,19,32,35,43,44**;30 Apr 99;Build 8 | 
|---|
|  | 3 | ; | 
|---|
|  | 4 | MAIN ; | 
|---|
|  | 5 | ;Q:($D(^TMP("RGEXC")))!($D(^TMP("RGEXC2"))) | 
|---|
|  | 6 | L +^RGHL7(991.1):0 I '$T Q | 
|---|
|  | 7 | L -^RGHL7(991.1) | 
|---|
|  | 8 | L +^RGHL7(991.1,"RG PURGE EXCEPTION"):5 E  Q | 
|---|
|  | 9 | I $D(ZTQUEUED) S ZTREQ="@" | 
|---|
|  | 10 | S $P(^RGSITE(991.8,1,"EXCPRG"),"^",1)=$$NOW^XLFDT | 
|---|
|  | 11 | S $P(^RGSITE(991.8,1,"EXCPRG"),"^",3)="R" | 
|---|
|  | 12 | D PROC | 
|---|
|  | 13 | D PRGDUP | 
|---|
|  | 14 | D PRG30 | 
|---|
|  | 15 | D PRGZZ | 
|---|
|  | 16 | S $P(^RGSITE(991.8,1,"EXCPRG"),"^",2)=$$NOW^XLFDT | 
|---|
|  | 17 | S $P(^RGSITE(991.8,1,"EXCPRG"),"^",3)="C" | 
|---|
|  | 18 | L -^RGHL7(991.1,"RG PURGE EXCEPTION") | 
|---|
|  | 19 | Q | 
|---|
|  | 20 | PRGPAT ;Purge by Patient | 
|---|
|  | 21 | W ! | 
|---|
|  | 22 | S DIC="^DPT(",DIC(0)="QEAM",DIC("A")="Select PATIENT: " | 
|---|
|  | 23 | D ^DIC K DIC G:Y<0 QUIT  S RGDFN=+Y | 
|---|
|  | 24 | S EXCT="",FLAG=0 | 
|---|
|  | 25 | F  S EXCT=$O(^RGHL7(991.1,"ADFN",EXCT)) Q:EXCT=""  D | 
|---|
|  | 26 | . I $D(^RGHL7(991.1,"ADFN",EXCT,RGDFN)) S FLAG=1 Q | 
|---|
|  | 27 | I FLAG=0 W !,"There are no exceptions on file for this patient." G PRGPAT | 
|---|
|  | 28 | I $$IFLOCAL^MPIF001(RGDFN) W !,"This patient does not have a national ICN assigned, do not purge." Q | 
|---|
|  | 29 | S DFN=RGDFN D DEM^VADPT | 
|---|
|  | 30 | S DIR(0)="YA",DIR("B")="YES" | 
|---|
|  | 31 | S DIR("A")="Are you sure you want to purge all exceptions on file for "_VADM(1)_"?   YES//  " | 
|---|
|  | 32 | D ^DIR Q:$D(DIRUT)  I Y>0 D | 
|---|
|  | 33 | . S EXCT="",CNT=0 | 
|---|
|  | 34 | . F  S EXCT=$O(^RGHL7(991.1,"ADFN",EXCT)) Q:'EXCT  D | 
|---|
|  | 35 | .. S IEN=0 | 
|---|
|  | 36 | .. F  S IEN=$O(^RGHL7(991.1,"ADFN",EXCT,RGDFN,IEN)) Q:'IEN  D | 
|---|
|  | 37 | ... S IEN2=0 | 
|---|
|  | 38 | ... F  S IEN2=$O(^RGHL7(991.1,"ADFN",EXCT,RGDFN,IEN,IEN2)) Q:'IEN2  D | 
|---|
|  | 39 | .... S NUM="" S NUM=$P(^RGHL7(991.1,IEN,1,0),"^",4) | 
|---|
|  | 40 | .... I NUM=1 S DIK="^RGHL7(991.1,",DA=IEN D ^DIK K DIK,DA S CNT=CNT+1 | 
|---|
|  | 41 | .... E  I NUM>1 D DEL | 
|---|
|  | 42 | . W !,"All exceptions purged for "_VADM(1)_"   DFN: "_RGDFN | 
|---|
|  | 43 | K EXCT,DFN,FLAG,VADM,CNT,IEN,IEN2,NUM,RGDFN,Y | 
|---|
|  | 44 | QUIT Q | 
|---|
|  | 45 | ; | 
|---|
|  | 46 | PRGDT ; Purge by Date | 
|---|
|  | 47 | W !!,"Enter a date for the purge. All exceptions on file, on or before that date, will be deleted." | 
|---|
|  | 48 | K DIR,DIRUT,DTOUT,DUOUT | 
|---|
|  | 49 | S DIR(0)="DA^:DT:EPX",DIR("A")="Enter Date for Purge: " | 
|---|
|  | 50 | D ^DIR K DIR Q:$D(DIRUT) | 
|---|
|  | 51 | S PURDT=Y | 
|---|
|  | 52 | S PDATE=$$FMTE^XLFDT(PURDT) | 
|---|
|  | 53 | S DIR(0)="YA",DIR("B")="YES" | 
|---|
|  | 54 | S DIR("A")="Are you sure you want to purge all exceptions on file dated on or before "_PDATE_"?  YES//  " | 
|---|
|  | 55 | D ^DIR Q:$D(DIRUT)  I Y>0 D | 
|---|
|  | 56 | . S EXCDT="",CNT=0 | 
|---|
|  | 57 | . F  S EXCDT=$O(^RGHL7(991.1,"AD",EXCDT)) Q:'EXCDT  D | 
|---|
|  | 58 | .. I ($P(EXCDT,".",1)=PURDT)!($P(EXCDT,".",1)<PURDT) D | 
|---|
|  | 59 | ... S IEN=0 | 
|---|
|  | 60 | ... F  S IEN=$O(^RGHL7(991.1,"AD",EXCDT,IEN)) Q:'IEN  D | 
|---|
|  | 61 | .... S NUM="" S NUM=$P($G(^RGHL7(991.1,IEN,1,0)),"^",4) Q:NUM<1 | 
|---|
|  | 62 | .... S CNT=CNT+NUM | 
|---|
|  | 63 | .... S DIK="^RGHL7(991.1,",DA=IEN | 
|---|
|  | 64 | .... D ^DIK K DIK,DA | 
|---|
|  | 65 | I CNT=0 W !,"There are no exceptions dated on or before "_PDATE_", no data to purge." | 
|---|
|  | 66 | E  I CNT>0 W !,CNT_" exceptions, dated on or before "_PDATE_" have been purged!" | 
|---|
|  | 67 | K PDATE,PURDT,EXCDT,CNT,IEN,NUM,Y | 
|---|
|  | 68 | Q | 
|---|
|  | 69 | PRG30   ; Purge Exceptions over 30 days old | 
|---|
|  | 70 | S TODAY="" | 
|---|
|  | 71 | S TODAY=$$NOW^XLFDT D | 
|---|
|  | 72 | . S EXCDT="",CNT=0,DIFF="" | 
|---|
|  | 73 | . F  S EXCDT=$O(^RGHL7(991.1,"AD",EXCDT)) Q:'EXCDT  D | 
|---|
|  | 74 | .. S DIFF=$$FMDIFF^XLFDT(TODAY,EXCDT) | 
|---|
|  | 75 | .. I DIFF>30 D | 
|---|
|  | 76 | ... S IEN=0 | 
|---|
|  | 77 | ... F  S IEN=$O(^RGHL7(991.1,"AD",EXCDT,IEN)) Q:'IEN  D | 
|---|
|  | 78 | .... S NUM="" S NUM=$P($G(^RGHL7(991.1,IEN,1,0)),"^",4) Q:'NUM | 
|---|
|  | 79 | .... S IEN2=0 | 
|---|
|  | 80 | .... F  S IEN2=$O(^RGHL7(991.1,IEN,1,IEN2)) Q:'IEN2  D | 
|---|
|  | 81 | ..... S STAT="" | 
|---|
|  | 82 | ..... S STAT=$P(^RGHL7(991.1,IEN,1,IEN2,0),"^",5) | 
|---|
|  | 83 | ..... ; Only delete PROCESSED exceptions | 
|---|
|  | 84 | ..... I (STAT>0)!(STAT="") D | 
|---|
|  | 85 | ...... I NUM>1 D DEL | 
|---|
|  | 86 | ...... E  I NUM=1 D | 
|---|
|  | 87 | ....... S CNT=CNT+NUM | 
|---|
|  | 88 | ....... S DIK="^RGHL7(991.1,",DA=IEN | 
|---|
|  | 89 | ....... D ^DIK K DIK,DA | 
|---|
|  | 90 | K DIFF,TODAY,EXCDT,CNT,IEN,IEN2,NUM,STAT | 
|---|
|  | 91 | Q | 
|---|
|  | 92 | PRGEXC ; Purge by Exception Type | 
|---|
|  | 93 | ;S DIC="^RGHL7(991.11,",DIC(0)="QEAM" | 
|---|
|  | 94 | ;S DIC("A")="Enter an exception type to purge: " | 
|---|
|  | 95 | ;D ^DIC K DIC G:Y<200 QUIT  S EXCTYP=+Y,ETYPE=X | 
|---|
|  | 96 | ;S DIR(0)="YA",DIR("B")="YES" | 
|---|
|  | 97 | ;S DIR("A")="*WARNING* This will permanently delete all "_ETYPE_" exceptions. Are you sure you want to do this?  YES//  " | 
|---|
|  | 98 | ;D ^DIR Q:$D(DIRUT)  I Y>0 D | 
|---|
|  | 99 | ;. S CNT=0,IEN="" | 
|---|
|  | 100 | ;. F  S IEN=$O(^RGHL7(991.1,"AC",EXCTYP,IEN)) Q:'IEN  D | 
|---|
|  | 101 | ;.. S IEN2=0 | 
|---|
|  | 102 | ;.. F  S IEN2=$O(^RGHL7(991.1,"AC",EXCTYP,IEN,IEN2)) Q:'IEN2  D | 
|---|
|  | 103 | ;... S NUM="" S NUM=$P(^RGHL7(991.1,IEN,1,0),"^",4) | 
|---|
|  | 104 | ;... I NUM=1 S DIK="^RGHL7(991.1,",DA=IEN D ^DIK K DIK,DA S CNT=CNT+1 | 
|---|
|  | 105 | ;... E  I NUM>1 D DEL | 
|---|
|  | 106 | ;I CNT=0 W !,"There are no "_ETYPE_" exceptions on file." | 
|---|
|  | 107 | ;E  I CNT>0 W !,CNT_" "_ETYPE_" Exceptions purged!" | 
|---|
|  | 108 | ;K ETYPE,CNT,IEN,IEN2,NUM,X,Y | 
|---|
|  | 109 | ;Q | 
|---|
|  | 110 | PRGDUP ; Purge Duplicate Entries; retain most recent for all types except 234. | 
|---|
|  | 111 | S EXCTYP="",CNT=0 | 
|---|
|  | 112 | K ^TMP("RGEVDUP",$J) | 
|---|
|  | 113 | F  S EXCTYP=$O(^RGHL7(991.1,"ADFN",EXCTYP)) Q:'EXCTYP  D | 
|---|
|  | 114 | . I EXCTYP=234 Q  ;**44 process 234s separately below | 
|---|
|  | 115 | . S RGDFN="" | 
|---|
|  | 116 | . F  S RGDFN=$O(^RGHL7(991.1,"ADFN",EXCTYP,RGDFN)) Q:'RGDFN  D | 
|---|
|  | 117 | .. S IEN=0 | 
|---|
|  | 118 | .. F  S IEN=$O(^RGHL7(991.1,"ADFN",EXCTYP,RGDFN,IEN)) Q:'IEN  D | 
|---|
|  | 119 | ... S IEN2=0 | 
|---|
|  | 120 | ... F  S IEN2=$O(^RGHL7(991.1,"ADFN",EXCTYP,RGDFN,IEN,IEN2)) Q:'IEN2  D | 
|---|
|  | 121 | .... S EXCDT=$P(^RGHL7(991.1,IEN,0),"^",3) | 
|---|
|  | 122 | .... I '$D(^TMP("RGEVDUP",$J,RGDFN,EXCTYP)) D  Q | 
|---|
|  | 123 | ..... S ^TMP("RGEVDUP",$J,RGDFN,EXCTYP)=EXCDT_"^"_IEN_"^"_IEN2 | 
|---|
|  | 124 | .... I $D(^TMP("RGEVDUP",$J,RGDFN,EXCTYP)) D | 
|---|
|  | 125 | ..... S OLDNODE=^TMP("RGEVDUP",$J,RGDFN,EXCTYP) | 
|---|
|  | 126 | ..... S OLDDT=$P(OLDNODE,"^") | 
|---|
|  | 127 | ..... I EXCDT>OLDDT D  Q | 
|---|
|  | 128 | ...... S NUM="" S NUM=$P(^RGHL7(991.1,IEN,1,0),"^",4) | 
|---|
|  | 129 | ...... I NUM=1 S DIK="^RGHL7(991.1,",DA=$P(OLDNODE,"^",2) D ^DIK K DIK,DA | 
|---|
|  | 130 | ...... E  I NUM>1 D | 
|---|
|  | 131 | ....... S DA(1)=$P(OLDNODE,"^",2),DA=$P(OLDNODE,"^",3) | 
|---|
|  | 132 | ....... S DIK="^RGHL7(991.1,"_DA(1)_",1," D ^DIK K DIK,DA | 
|---|
|  | 133 | ...... S CNT=CNT+1 | 
|---|
|  | 134 | ...... S ^TMP("RGEVDUP",$J,RGDFN,EXCTYP)=EXCDT_"^"_IEN_"^"_IEN2 | 
|---|
|  | 135 | ..... I OLDDT>EXCDT!(OLDDT=EXCDT) D | 
|---|
|  | 136 | ...... S NUM="" S NUM=$P(^RGHL7(991.1,IEN,1,0),"^",4) | 
|---|
|  | 137 | ...... I NUM=1 S DIK="^RGHL7(991.1,",DA=IEN D ^DIK K DIK,DA S CNT=CNT+1 | 
|---|
|  | 138 | ...... E  I NUM>1 D DEL | 
|---|
|  | 139 | ; W !,CNT_" Duplicate entries" | 
|---|
|  | 140 | ;Process PRIMARY VIEW REJECT (234) duplicates; purge if for SAME day. | 
|---|
|  | 141 | ;**44 through remainder of module. | 
|---|
|  | 142 | K ^TMP("RGDFNDT",$J) S RGDFN="" | 
|---|
|  | 143 | F  S RGDFN=$O(^RGHL7(991.1,"ADFN",234,RGDFN)) Q:'RGDFN  D | 
|---|
|  | 144 | .S IEN=0 | 
|---|
|  | 145 | .F  S IEN=$O(^RGHL7(991.1,"ADFN",234,RGDFN,IEN)) Q:'IEN  D | 
|---|
|  | 146 | ..S IEN2=0 | 
|---|
|  | 147 | ..F  S IEN2=$O(^RGHL7(991.1,"ADFN",234,RGDFN,IEN,IEN2)) Q:'IEN2  D | 
|---|
|  | 148 | ...S EXCDT=$P(^RGHL7(991.1,IEN,0),"^",3) | 
|---|
|  | 149 | ...;How many for each DFN? Store in ^TMP("RGDFNDT") | 
|---|
|  | 150 | ...I '$D(^TMP("RGDFNDT",$J,RGDFN)) S ^TMP("RGDFNDT",$J,RGDFN)=0 | 
|---|
|  | 151 | ...I $D(^TMP("RGDFNDT",$J,RGDFN)) D | 
|---|
|  | 152 | ....S ^TMP("RGDFNDT",$J,RGDFN)=^TMP("RGDFNDT",$J,RGDFN)+1 | 
|---|
|  | 153 | ....S ^TMP("RGDFNDT",$J,RGDFN,IEN,IEN2)=$P(EXCDT,".") ;date only/no time | 
|---|
|  | 154 | ;If RGDFN has more than 1 exception, see if any are for same DAY. | 
|---|
|  | 155 | ;Process the ^TMP("RGDFNDT",$J global to build LOC array. | 
|---|
|  | 156 | I $D(^TMP("RGDFNDT",$J)) D | 
|---|
|  | 157 | .S RGDFN="" | 
|---|
|  | 158 | .F  S RGDFN=$O(^TMP("RGDFNDT",$J,RGDFN)) Q:'RGDFN  D | 
|---|
|  | 159 | ..;If only one 234 exception for DFN ignore it. | 
|---|
|  | 160 | ..I ^TMP("RGDFNDT",$J,RGDFN)=1 Q | 
|---|
|  | 161 | ..;More than one for this DFN?  How many for same day? | 
|---|
|  | 162 | ..S IEN=0 K LOC | 
|---|
|  | 163 | ..F  S IEN=$O(^TMP("RGDFNDT",$J,RGDFN,IEN)) Q:'IEN  D | 
|---|
|  | 164 | ...S (IEN2,VAL)=0 | 
|---|
|  | 165 | ...F  S IEN2=$O(^TMP("RGDFNDT",$J,RGDFN,IEN,IEN2)) Q:'IEN2  D | 
|---|
|  | 166 | ....S VAL=$P(^TMP("RGDFNDT",$J,RGDFN,IEN,IEN2),"^") | 
|---|
|  | 167 | ....I '$D(LOC(VAL)) S LOC(VAL)=0 | 
|---|
|  | 168 | ....I $D(LOC(VAL)) D | 
|---|
|  | 169 | .....S LOC(VAL)=LOC(VAL)+1 | 
|---|
|  | 170 | .....S LOC(VAL,IEN,IEN2)="" | 
|---|
|  | 171 | ..;Process the LOC array; contains numbers / day / DFN. | 
|---|
|  | 172 | ..;If only 1 exception / day, keep it. | 
|---|
|  | 173 | ..S RGDT=0 K CTR,TOT | 
|---|
|  | 174 | ..F  S RGDT=$O(LOC(RGDT)) Q:'RGDT  D | 
|---|
|  | 175 | ...S TOT=LOC(RGDT) | 
|---|
|  | 176 | ...I TOT=1 K TOT Q  ;only 1. | 
|---|
|  | 177 | ...;More than 1, delete all except 1. | 
|---|
|  | 178 | ...S TOT=TOT-1 ;leave 1; doesn't matter which - all are same day. | 
|---|
|  | 179 | ...S IEN=0,CTR=0 | 
|---|
|  | 180 | ...F  S IEN=$O(LOC(RGDT,IEN)) Q:'IEN  D | 
|---|
|  | 181 | ....I CTR=TOT Q | 
|---|
|  | 182 | ....S CTR=CTR+1,IEN2=0 | 
|---|
|  | 183 | ....F  S IEN2=$O(LOC(RGDT,IEN,IEN2)) Q:'IEN2  D DEL ;delete entry | 
|---|
|  | 184 | K CNT,CTR,EXCDT,IEN,IEN2,LOC,NUM,OLDDT,OLDNODE,RGDFN,RGDT,TOT,VAL,^TMP("RGDFNDT") | 
|---|
|  | 185 | Q | 
|---|
|  | 186 | PRGZZ ;Purge if name field is null (incomplete record) | 
|---|
|  | 187 | ;Purge if -9 node exists, this indicates the record has been merged. | 
|---|
|  | 188 | S EXCTYP="",CNT="" | 
|---|
|  | 189 | F  S EXCTYP=$O(^RGHL7(991.1,"ADFN",EXCTYP)) Q:'EXCTYP  D | 
|---|
|  | 190 | . S RGDFN="" | 
|---|
|  | 191 | . F  S RGDFN=$O(^RGHL7(991.1,"ADFN",EXCTYP,RGDFN)) Q:'RGDFN  D | 
|---|
|  | 192 | .. S IEN=0 | 
|---|
|  | 193 | .. F  S IEN=$O(^RGHL7(991.1,"ADFN",EXCTYP,RGDFN,IEN)) Q:'IEN  D | 
|---|
|  | 194 | ... S IEN2=0 | 
|---|
|  | 195 | ... F  S IEN2=$O(^RGHL7(991.1,"ADFN",EXCTYP,RGDFN,IEN,IEN2)) Q:'IEN2  D | 
|---|
|  | 196 | .... S DFN=RGDFN D DEM^VADPT | 
|---|
|  | 197 | .... I VADM(1)=""!($D(^DPT(RGDFN,-9))) D | 
|---|
|  | 198 | ..... S NUM="" S NUM=$P(^RGHL7(991.1,IEN,1,0),"^",4) | 
|---|
|  | 199 | ..... I NUM=1 S DIK="^RGHL7(991.1,",DA=IEN D ^DIK K DIK,DA | 
|---|
|  | 200 | ..... E  I NUM>1 D DEL | 
|---|
|  | 201 | K EXCTYP,RGDFN,DFN,IEN,IEN2,NUM,VADM | 
|---|
|  | 202 | Q | 
|---|
|  | 203 | DEL ; | 
|---|
|  | 204 | S CNT=CNT+1 | 
|---|
|  | 205 | S DA(1)=IEN,DA=IEN2 | 
|---|
|  | 206 | S DIK="^RGHL7(991.1,"_DA(1)_",1," | 
|---|
|  | 207 | D ^DIK K DIK,DA | 
|---|
|  | 208 | Q | 
|---|
|  | 209 | PROC ;Set these exception types to PROCESSED if they have a national ICN | 
|---|
|  | 210 | ;209 - Required field(s) missing for patient sent to MPI, | 
|---|
|  | 211 | ;227 - Multiple ICNs, 213 - SSN Match Failed, 214 - Name Doesn't Match | 
|---|
|  | 212 | S EXCTYP="" | 
|---|
|  | 213 | S HOME=$$SITE^VASITE() | 
|---|
|  | 214 | F  S EXCTYP=$O(^RGHL7(991.1,"AC",EXCTYP)) Q:'EXCTYP  D | 
|---|
|  | 215 | . I (EXCTYP=209)!(EXCTYP=227)!(EXCTYP=213)!(EXCTYP=214) D  ;**43 | 
|---|
|  | 216 | .. S IEN=0 | 
|---|
|  | 217 | .. F  S IEN=$O(^RGHL7(991.1,"AC",EXCTYP,IEN)) Q:'IEN  D | 
|---|
|  | 218 | ... S IEN2=0,ICN="",RGDFN="" | 
|---|
|  | 219 | ... F  S IEN2=$O(^RGHL7(991.1,"AC",EXCTYP,IEN,IEN2)) Q:'IEN2  D | 
|---|
|  | 220 | .... S RGDFN=$P(^RGHL7(991.1,IEN,1,IEN2,0),"^",4) Q:'RGDFN | 
|---|
|  | 221 | .... S ICN=+$$GETICN^MPIF001(RGDFN) | 
|---|
|  | 222 | .... I $E(ICN,1,3)'=$E($P(HOME,"^",3),1,3)&(ICN>0) D | 
|---|
|  | 223 | ..... L +^RGHL7(991.1,IEN):10 | 
|---|
|  | 224 | ..... S DA(1)=IEN,DA=IEN2,DR="6///"_1,DIE="^RGHL7(991.1,"_DA(1)_",1," | 
|---|
|  | 225 | ..... D ^DIE K DIE,DA,DR | 
|---|
|  | 226 | ..... L -^RGHL7(991.1,IEN) | 
|---|
|  | 227 | K EXCTYP,HOME,ICN,IEN,IEN2,RGDFN | 
|---|
|  | 228 | Q | 
|---|