RGEVPRG ;BAY/ALS-OPTIONS TO PURGE MPI/PD EXCEPTIONS ;08/23/99 ;;1.0;CLINICAL INFO RESOURCE NETWORK;**3,12,19,32,35,43,44**;30 Apr 99;Build 8 ; MAIN ; ;Q:($D(^TMP("RGEXC")))!($D(^TMP("RGEXC2"))) L +^RGHL7(991.1):0 I '$T Q L -^RGHL7(991.1) L +^RGHL7(991.1,"RG PURGE EXCEPTION"):5 E Q I $D(ZTQUEUED) S ZTREQ="@" S $P(^RGSITE(991.8,1,"EXCPRG"),"^",1)=$$NOW^XLFDT S $P(^RGSITE(991.8,1,"EXCPRG"),"^",3)="R" D PROC D PRGDUP D PRG30 D PRGZZ S $P(^RGSITE(991.8,1,"EXCPRG"),"^",2)=$$NOW^XLFDT S $P(^RGSITE(991.8,1,"EXCPRG"),"^",3)="C" L -^RGHL7(991.1,"RG PURGE EXCEPTION") Q PRGPAT ;Purge by Patient W ! S DIC="^DPT(",DIC(0)="QEAM",DIC("A")="Select PATIENT: " D ^DIC K DIC G:Y<0 QUIT S RGDFN=+Y S EXCT="",FLAG=0 F S EXCT=$O(^RGHL7(991.1,"ADFN",EXCT)) Q:EXCT="" D . I $D(^RGHL7(991.1,"ADFN",EXCT,RGDFN)) S FLAG=1 Q I FLAG=0 W !,"There are no exceptions on file for this patient." G PRGPAT I $$IFLOCAL^MPIF001(RGDFN) W !,"This patient does not have a national ICN assigned, do not purge." Q S DFN=RGDFN D DEM^VADPT S DIR(0)="YA",DIR("B")="YES" S DIR("A")="Are you sure you want to purge all exceptions on file for "_VADM(1)_"? YES// " D ^DIR Q:$D(DIRUT) I Y>0 D . S EXCT="",CNT=0 . F S EXCT=$O(^RGHL7(991.1,"ADFN",EXCT)) Q:'EXCT D .. S IEN=0 .. F S IEN=$O(^RGHL7(991.1,"ADFN",EXCT,RGDFN,IEN)) Q:'IEN D ... S IEN2=0 ... F S IEN2=$O(^RGHL7(991.1,"ADFN",EXCT,RGDFN,IEN,IEN2)) Q:'IEN2 D .... S NUM="" S NUM=$P(^RGHL7(991.1,IEN,1,0),"^",4) .... I NUM=1 S DIK="^RGHL7(991.1,",DA=IEN D ^DIK K DIK,DA S CNT=CNT+1 .... E I NUM>1 D DEL . W !,"All exceptions purged for "_VADM(1)_" DFN: "_RGDFN K EXCT,DFN,FLAG,VADM,CNT,IEN,IEN2,NUM,RGDFN,Y QUIT Q ; PRGDT ; Purge by Date W !!,"Enter a date for the purge. All exceptions on file, on or before that date, will be deleted." K DIR,DIRUT,DTOUT,DUOUT S DIR(0)="DA^:DT:EPX",DIR("A")="Enter Date for Purge: " D ^DIR K DIR Q:$D(DIRUT) S PURDT=Y S PDATE=$$FMTE^XLFDT(PURDT) S DIR(0)="YA",DIR("B")="YES" S DIR("A")="Are you sure you want to purge all exceptions on file dated on or before "_PDATE_"? YES// " D ^DIR Q:$D(DIRUT) I Y>0 D . S EXCDT="",CNT=0 . F S EXCDT=$O(^RGHL7(991.1,"AD",EXCDT)) Q:'EXCDT D .. I ($P(EXCDT,".",1)=PURDT)!($P(EXCDT,".",1)0 W !,CNT_" exceptions, dated on or before "_PDATE_" have been purged!" K PDATE,PURDT,EXCDT,CNT,IEN,NUM,Y Q PRG30 ; Purge Exceptions over 30 days old S TODAY="" S TODAY=$$NOW^XLFDT D . S EXCDT="",CNT=0,DIFF="" . F S EXCDT=$O(^RGHL7(991.1,"AD",EXCDT)) Q:'EXCDT D .. S DIFF=$$FMDIFF^XLFDT(TODAY,EXCDT) .. I DIFF>30 D ... S IEN=0 ... F S IEN=$O(^RGHL7(991.1,"AD",EXCDT,IEN)) Q:'IEN D .... S NUM="" S NUM=$P($G(^RGHL7(991.1,IEN,1,0)),"^",4) Q:'NUM .... S IEN2=0 .... F S IEN2=$O(^RGHL7(991.1,IEN,1,IEN2)) Q:'IEN2 D ..... S STAT="" ..... S STAT=$P(^RGHL7(991.1,IEN,1,IEN2,0),"^",5) ..... ; Only delete PROCESSED exceptions ..... I (STAT>0)!(STAT="") D ...... I NUM>1 D DEL ...... E I NUM=1 D ....... S CNT=CNT+NUM ....... S DIK="^RGHL7(991.1,",DA=IEN ....... D ^DIK K DIK,DA K DIFF,TODAY,EXCDT,CNT,IEN,IEN2,NUM,STAT Q PRGEXC ; Purge by Exception Type ;S DIC="^RGHL7(991.11,",DIC(0)="QEAM" ;S DIC("A")="Enter an exception type to purge: " ;D ^DIC K DIC G:Y<200 QUIT S EXCTYP=+Y,ETYPE=X ;S DIR(0)="YA",DIR("B")="YES" ;S DIR("A")="*WARNING* This will permanently delete all "_ETYPE_" exceptions. Are you sure you want to do this? YES// " ;D ^DIR Q:$D(DIRUT) I Y>0 D ;. S CNT=0,IEN="" ;. F S IEN=$O(^RGHL7(991.1,"AC",EXCTYP,IEN)) Q:'IEN D ;.. S IEN2=0 ;.. F S IEN2=$O(^RGHL7(991.1,"AC",EXCTYP,IEN,IEN2)) Q:'IEN2 D ;... S NUM="" S NUM=$P(^RGHL7(991.1,IEN,1,0),"^",4) ;... I NUM=1 S DIK="^RGHL7(991.1,",DA=IEN D ^DIK K DIK,DA S CNT=CNT+1 ;... E I NUM>1 D DEL ;I CNT=0 W !,"There are no "_ETYPE_" exceptions on file." ;E I CNT>0 W !,CNT_" "_ETYPE_" Exceptions purged!" ;K ETYPE,CNT,IEN,IEN2,NUM,X,Y ;Q PRGDUP ; Purge Duplicate Entries; retain most recent for all types except 234. S EXCTYP="",CNT=0 K ^TMP("RGEVDUP",$J) F S EXCTYP=$O(^RGHL7(991.1,"ADFN",EXCTYP)) Q:'EXCTYP D . I EXCTYP=234 Q ;**44 process 234s separately below . S RGDFN="" . F S RGDFN=$O(^RGHL7(991.1,"ADFN",EXCTYP,RGDFN)) Q:'RGDFN D .. S IEN=0 .. F S IEN=$O(^RGHL7(991.1,"ADFN",EXCTYP,RGDFN,IEN)) Q:'IEN D ... S IEN2=0 ... F S IEN2=$O(^RGHL7(991.1,"ADFN",EXCTYP,RGDFN,IEN,IEN2)) Q:'IEN2 D .... S EXCDT=$P(^RGHL7(991.1,IEN,0),"^",3) .... I '$D(^TMP("RGEVDUP",$J,RGDFN,EXCTYP)) D Q ..... S ^TMP("RGEVDUP",$J,RGDFN,EXCTYP)=EXCDT_"^"_IEN_"^"_IEN2 .... I $D(^TMP("RGEVDUP",$J,RGDFN,EXCTYP)) D ..... S OLDNODE=^TMP("RGEVDUP",$J,RGDFN,EXCTYP) ..... S OLDDT=$P(OLDNODE,"^") ..... I EXCDT>OLDDT D Q ...... S NUM="" S NUM=$P(^RGHL7(991.1,IEN,1,0),"^",4) ...... I NUM=1 S DIK="^RGHL7(991.1,",DA=$P(OLDNODE,"^",2) D ^DIK K DIK,DA ...... E I NUM>1 D ....... S DA(1)=$P(OLDNODE,"^",2),DA=$P(OLDNODE,"^",3) ....... S DIK="^RGHL7(991.1,"_DA(1)_",1," D ^DIK K DIK,DA ...... S CNT=CNT+1 ...... S ^TMP("RGEVDUP",$J,RGDFN,EXCTYP)=EXCDT_"^"_IEN_"^"_IEN2 ..... I OLDDT>EXCDT!(OLDDT=EXCDT) D ...... S NUM="" S NUM=$P(^RGHL7(991.1,IEN,1,0),"^",4) ...... I NUM=1 S DIK="^RGHL7(991.1,",DA=IEN D ^DIK K DIK,DA S CNT=CNT+1 ...... E I NUM>1 D DEL ; W !,CNT_" Duplicate entries" ;Process PRIMARY VIEW REJECT (234) duplicates; purge if for SAME day. ;**44 through remainder of module. K ^TMP("RGDFNDT",$J) S RGDFN="" F S RGDFN=$O(^RGHL7(991.1,"ADFN",234,RGDFN)) Q:'RGDFN D .S IEN=0 .F S IEN=$O(^RGHL7(991.1,"ADFN",234,RGDFN,IEN)) Q:'IEN D ..S IEN2=0 ..F S IEN2=$O(^RGHL7(991.1,"ADFN",234,RGDFN,IEN,IEN2)) Q:'IEN2 D ...S EXCDT=$P(^RGHL7(991.1,IEN,0),"^",3) ...;How many for each DFN? Store in ^TMP("RGDFNDT") ...I '$D(^TMP("RGDFNDT",$J,RGDFN)) S ^TMP("RGDFNDT",$J,RGDFN)=0 ...I $D(^TMP("RGDFNDT",$J,RGDFN)) D ....S ^TMP("RGDFNDT",$J,RGDFN)=^TMP("RGDFNDT",$J,RGDFN)+1 ....S ^TMP("RGDFNDT",$J,RGDFN,IEN,IEN2)=$P(EXCDT,".") ;date only/no time ;If RGDFN has more than 1 exception, see if any are for same DAY. ;Process the ^TMP("RGDFNDT",$J global to build LOC array. I $D(^TMP("RGDFNDT",$J)) D .S RGDFN="" .F S RGDFN=$O(^TMP("RGDFNDT",$J,RGDFN)) Q:'RGDFN D ..;If only one 234 exception for DFN ignore it. ..I ^TMP("RGDFNDT",$J,RGDFN)=1 Q ..;More than one for this DFN? How many for same day? ..S IEN=0 K LOC ..F S IEN=$O(^TMP("RGDFNDT",$J,RGDFN,IEN)) Q:'IEN D ...S (IEN2,VAL)=0 ...F S IEN2=$O(^TMP("RGDFNDT",$J,RGDFN,IEN,IEN2)) Q:'IEN2 D ....S VAL=$P(^TMP("RGDFNDT",$J,RGDFN,IEN,IEN2),"^") ....I '$D(LOC(VAL)) S LOC(VAL)=0 ....I $D(LOC(VAL)) D .....S LOC(VAL)=LOC(VAL)+1 .....S LOC(VAL,IEN,IEN2)="" ..;Process the LOC array; contains numbers / day / DFN. ..;If only 1 exception / day, keep it. ..S RGDT=0 K CTR,TOT ..F S RGDT=$O(LOC(RGDT)) Q:'RGDT D ...S TOT=LOC(RGDT) ...I TOT=1 K TOT Q ;only 1. ...;More than 1, delete all except 1. ...S TOT=TOT-1 ;leave 1; doesn't matter which - all are same day. ...S IEN=0,CTR=0 ...F S IEN=$O(LOC(RGDT,IEN)) Q:'IEN D ....I CTR=TOT Q ....S CTR=CTR+1,IEN2=0 ....F S IEN2=$O(LOC(RGDT,IEN,IEN2)) Q:'IEN2 D DEL ;delete entry K CNT,CTR,EXCDT,IEN,IEN2,LOC,NUM,OLDDT,OLDNODE,RGDFN,RGDT,TOT,VAL,^TMP("RGDFNDT") Q PRGZZ ;Purge if name field is null (incomplete record) ;Purge if -9 node exists, this indicates the record has been merged. S EXCTYP="",CNT="" F S EXCTYP=$O(^RGHL7(991.1,"ADFN",EXCTYP)) Q:'EXCTYP D . S RGDFN="" . F S RGDFN=$O(^RGHL7(991.1,"ADFN",EXCTYP,RGDFN)) Q:'RGDFN D .. S IEN=0 .. F S IEN=$O(^RGHL7(991.1,"ADFN",EXCTYP,RGDFN,IEN)) Q:'IEN D ... S IEN2=0 ... F S IEN2=$O(^RGHL7(991.1,"ADFN",EXCTYP,RGDFN,IEN,IEN2)) Q:'IEN2 D .... S DFN=RGDFN D DEM^VADPT .... I VADM(1)=""!($D(^DPT(RGDFN,-9))) D ..... S NUM="" S NUM=$P(^RGHL7(991.1,IEN,1,0),"^",4) ..... I NUM=1 S DIK="^RGHL7(991.1,",DA=IEN D ^DIK K DIK,DA ..... E I NUM>1 D DEL K EXCTYP,RGDFN,DFN,IEN,IEN2,NUM,VADM Q DEL ; S CNT=CNT+1 S DA(1)=IEN,DA=IEN2 S DIK="^RGHL7(991.1,"_DA(1)_",1," D ^DIK K DIK,DA Q PROC ;Set these exception types to PROCESSED if they have a national ICN ;209 - Required field(s) missing for patient sent to MPI, ;227 - Multiple ICNs, 213 - SSN Match Failed, 214 - Name Doesn't Match S EXCTYP="" S HOME=$$SITE^VASITE() F S EXCTYP=$O(^RGHL7(991.1,"AC",EXCTYP)) Q:'EXCTYP D . I (EXCTYP=209)!(EXCTYP=227)!(EXCTYP=213)!(EXCTYP=214) D ;**43 .. S IEN=0 .. F S IEN=$O(^RGHL7(991.1,"AC",EXCTYP,IEN)) Q:'IEN D ... S IEN2=0,ICN="",RGDFN="" ... F S IEN2=$O(^RGHL7(991.1,"AC",EXCTYP,IEN,IEN2)) Q:'IEN2 D .... S RGDFN=$P(^RGHL7(991.1,IEN,1,IEN2,0),"^",4) Q:'RGDFN .... S ICN=+$$GETICN^MPIF001(RGDFN) .... I $E(ICN,1,3)'=$E($P(HOME,"^",3),1,3)&(ICN>0) D ..... L +^RGHL7(991.1,IEN):10 ..... S DA(1)=IEN,DA=IEN2,DR="6///"_1,DIE="^RGHL7(991.1,"_DA(1)_",1," ..... D ^DIE K DIE,DA,DR ..... L -^RGHL7(991.1,IEN) K EXCTYP,HOME,ICN,IEN,IEN2,RGDFN Q