Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: XDRDPICK

XDRDPICK.m

Go to the documentation of this file.
  1. XDRDPICK ;SF-IRMFO.SEA/JLI - SELECT A PAIR OF POTENTIAL DUPLICATES AND VIEW ;10/10/08 13:38
  1. ;;7.3;TOOLKIT;**23,47,113**;Apr 25, 1995;Build 5
  1. ;;Per VHA Directive 2004-038, this routine should not be modified.
  1. ;;
  1. EN ;
  1. N XDRFL,CMORS1,CMORS2,D0,DA,DIC,DIE,DIR,ICNT,ICNT1,JCNT,LCNT,NCNT,PNCT,TMPGLA,TMPGLB,XDRDA,XDRFILN,XDRGLB,Y,PRIFILE
  1. ; D EN^XDRVCHEK
  1. S XDRFL=$$FILE() Q:XDRFL'>0 S PRIFILE=XDRFL,XDRGLB=$P(^DIC(XDRFL,0,"GL"),U,2),XDRFILN=$P(^DIC(XDRFL,0),U)
  1. LOOP ;
  1. W !!!,"At the following prompt select a POTENTIAL DUPLICATE ENTRY. If a selection"
  1. W !,"is not made, you will be given a chance to select from a list if you"
  1. W !,"want to. Otherwise, you will be returned to the menu system."
  1. W !
  1. S Y=$$LOOKUP^XDRDEDT(XDRFL)
  1. S XDRDA=+Y I Y>0 D SHOW G LOOP
  1. S DIR(0)="Y"
  1. S DIR("A")="Do you want to select from a list of potential duplicates"
  1. S DIR("B")="YES"
  1. D ^DIR K DIR Q:Y'>0
  1. S TMPGLB=$NA(^TMP("XDRDPICK",$J)),TMPGLA=$NA(^TMP("XDRDPICA",$J))
  1. K @TMPGLB,@TMPGLA
  1. D ASK
  1. I XDRDA>0 G LOOP
  1. K PCNT
  1. Q
  1. ;
  1. GETLIST ;
  1. I XDRGLB="DPT(",$O(^DPT("ACMORS",0))>0 D CMORS Q
  1. N FLG
  1. F ICNT=ICNT:0 S ICNT=$O(^VA(15,ICNT)) Q:ICNT'>0 S X=^(ICNT,0) D Q:'(NCNT#4)&(NCNT>0)&FLG
  1. . S FLG=1 ;This flag is when NCNT is set from previous call and STATUS is not "P" the first time- - so loop will not quit with (NCNT#4)
  1. . I $P(X,U,3)'="P" S:PCNT=NCNT FLG=0 Q
  1. . I $P($P(X,U),";",2)'=XDRGLB Q
  1. . S NCNT=NCNT+1,X1=+$P(X,U),X2=+$P(X,U,2)
  1. . I '($D(@(U_XDRGLB_X1_",0)"))#2)!'($D(@(U_XDRGLB_X2_",0)"))#2) S NCNT=NCNT-1 Q
  1. . S @TMPGLB@(NCNT)=ICNT_U_X1_U_X2
  1. . S @TMPGLB@(NCNT,1)=@(U_XDRGLB_X1_",0)")
  1. . S @TMPGLB@(NCNT,2)=@(U_XDRGLB_X2_",0)")
  1. Q
  1. ;
  1. ASK ;
  1. S NCNT=0,ICNT=0,ICNT1=0,JCNT=0,XDRDA=0,PCNT=0
  1. F D D CHEK Q:XDRDA'=0 Q:JCNT'>0
  1. . D GETLIST
  1. . S PCNT=NCNT
  1. . F JCNT=JCNT:0 S JCNT=$O(@TMPGLB@(JCNT)) Q:JCNT'>0 D Q:'(JCNT#4)
  1. . . W !!!,$J(JCNT,5),". ",@TMPGLB@(JCNT,1)
  1. . . W !,?8,@TMPGLB@(JCNT,2)
  1. I XDRDA>0 S XDRDA=+@TMPGLB@(XDRDA) D SHOW
  1. Q
  1. ;
  1. CHEK ;
  1. W !
  1. I JCNT'>0 S DIR(0)="N"
  1. E S DIR(0)="NO",DIR("A",1)="Enter Return to continue listing or"
  1. S DIR("A")="Select the desired entry by number"
  1. S DIR(0)=DIR(0)_"^1:"_NCNT
  1. D ^DIR K DIR
  1. I Y>0 S XDRDA=+Y
  1. I $D(DUOUT)!$D(DTOUT) S XDRDA=-1 K DTOUT,DUOUT
  1. K DIRUT
  1. Q
  1. ;
  1. SHOW ;
  1. ;L +^VA(15,+XDRDA,0):30 I '$T G BUSY
  1. ;I $P(^VA(15,+XDRDA,0),U,3)'="P" L -^VA(15,+XDRDA,0) G BUSY ; NOT AVAILABLE
  1. ;N XDRXX S XDRXX(15,(+XDRDA)_",",.03)="X"
  1. ;D FILE^DIE("","XDRXX")
  1. ;L -^VA(15,+XDRDA,0)
  1. I '$D(XDRGLB) N XDRGLB S XDRGLB=$P($P(^VA(15,XDRDA,0),U),";",2)
  1. I $D(@(XDRGLB_(+^VA(15,XDRDA,0))_",-9)"))!$D(@(XDRGLB_(+$P(^VA(15,XDRDA,0),U,2))_",-9)")) W !,$C(7),"One of these entries has already been merged. Pick another pair.",!! D RESET(XDRDA) Q
  1. S XQAID=""
  1. S X=^VA(15,+XDRDA,0)
  1. S X1=+X,X2=+$P(X,U,2)
  1. I $$COUNT^XDRRMRG2(XDRFL,X1,X2)>1 S X1=X2,X2=+X
  1. S XQADATA=XDRDA_U_X1_";"_X2_U_"PRIMARY"_U_XDRFL
  1. D ^XDRRMRG1
  1. ; If Primary verifier has set status to DUPLICATE, set STATUS at top level
  1. ; to "X" (VERIFICATION IN PROCESS)
  1. S DA=$$FIND1^DIC(15.02,","_XDRDA_",","X","PRIMARY")
  1. I DA>0 D
  1. . S X=$P(^VA(15,XDRDA,0),U,3)
  1. . I X="N"!(X="V") Q
  1. . S X=^VA(15,XDRDA,2,DA,0)
  1. . I $P(X,U,2)="V" D
  1. . . S DR=".03///X;.1///"_DT_";"
  1. . . S DIE="^VA(15,",DA=XDRDA D ^DIE K DIE,DR
  1. . . D SETUP^XDRRMRG1(XDRDA)
  1. . . D CHEKVER^XDRRMRG1
  1. ; If PATIENT, status=VERIFIED, NOT A DUPLICATE, add patients to MPI DO NOT LINK file(new with XT*7.3*113)
  1. I XDRFL=2,$P(^VA(15,XDRDA,0),U,3)="N" D
  1. . ;Quit if routine ^MPIFDNL is not loaded
  1. . S X="MPIFDNL" X ^%ZOSF("TEST") Q:'$T
  1. . S X=^VA(15,XDRDA,0)
  1. . D CALLRPC^MPIFDNL(DUZ,DUZ(2),+X,+$P(X,U,2))
  1. Q
  1. ;
  1. BUSY ;
  1. W !!,$C(7),"Record is being processed by someone else.",!!
  1. Q
  1. ;
  1. FILE(XDRFLAG) ;
  1. ; If XDRFLAG=1, option not available to the PATIENT file (#2) (new with XT*7.3*113)
  1. N X,XDRPT,XDRFLNM
  1. S (X,XDRPT)=0
  1. S XDRFLAG=+$G(XDRFLAG)
  1. I XDRFLAG=1 W !,"* This option is not available for PATIENTS"
  1. S XDRFLNM=""
  1. F I=0:0 S I=$O(^VA(15.1,I)) Q:I'>0 D
  1. . I XDRFLAG=1,I=2 S XDRPT=1 Q
  1. . S X=X+1,X(I)=""
  1. . S XDRFLNM=$P($G(^DIC(I,0)),U)
  1. . Q
  1. I X=0 Q -1
  1. I X=1 Q $O(X(""))
  1. S:'XDRFLAG XDRFLNM="PATIENT"
  1. K DIC S DIC=15.1,DIC(0)="AEQM"
  1. S DIC("A")="Which FILE are the potential duplicates in (e.g., "_XDRFLNM_")? "
  1. S DIC("B")=XDRFLNM
  1. I XDRFLAG=1 S DIC("S")="I Y'=2"
  1. D ^DIC K DIC
  1. Q +Y
  1. ;
  1. CMORS ; RETURN DATA RANKED BY CMORS (HIGH VALUES FIRST)
  1. I '$D(^VA(15,"ACMORS")) D SETCMOR
  1. I $G(^VA(15,"ACMORS",0))'>0 D SETCMOR
  1. I $G(^VA(15,"ACMORS",0))>0,$$FMDIFF^XLFDT(DT,^(0))>7 D ASKCMOR
  1. I ICNT1>0 S ICNT=ICNT-1
  1. S LCNT=0
  1. F ICNT=ICNT:0 S ICNT=$O(^VA(15,"ACMORS",ICNT)) Q:ICNT'>0 D Q:('(NCNT#4))&(LCNT>0)
  1. . F ICNT1=+ICNT1:0 S ICNT1=$O(^VA(15,"ACMORS",ICNT,ICNT1)) Q:ICNT1'>0 D Q:('(NCNT#4))&(LCNT>0)
  1. . . S X=$G(^VA(15,ICNT1,0)) Q:X="" Q:$P(X,U,3)'="P" S X1=+X,X2=+$P(X,U,2)
  1. . . I $D(@TMPGLA@(X1,X2)) Q
  1. . . S @TMPGLA@(X1,X2)=""
  1. . . S NCNT=NCNT+1,LCNT=LCNT+1
  1. . . S @TMPGLB@(NCNT)=ICNT1_U_X1_U_X2
  1. . . S CMORS1=$P($G(^DPT(X1,"MPI")),U,6),CMORS2=$P($G(^DPT(X2,"MPI")),U,6)
  1. . . S @TMPGLB@(NCNT,1)=@(U_XDRGLB_X1_",0)")_" (CMOR SCORE = "_$S(CMORS1="":"NULL",1:CMORS1)_")"
  1. . . S @TMPGLB@(NCNT,2)=@(U_XDRGLB_X2_",0)")_" (CMOR SCORE = "_$S(CMORS2="":"NULL",1:CMORS2)_")"
  1. Q
  1. ;
  1. SETCMOR ;
  1. N I,X,X1,X2,SCOR
  1. K ^VA(15,"ACMORS")
  1. F I=0:0 S I=$O(^VA(15,I)) Q:I'>0 S X=^(I,0) D
  1. . I $P(X,U,3)'="P" Q
  1. . I $P($P(X,U),";",2)'="DPT(" Q
  1. . S X1=+X,X2=+$P(X,U,2)
  1. . S SCOR=$P($G(^DPT(X1,"MPI")),U,6) I SCOR'>0 S SCOR=0
  1. . S ^VA(15,"ACMORS",(9999999-SCOR),I)=""
  1. . S SCOR=$P($G(^DPT(X2,"MPI")),U,6) I SCOR'>0 S SCOR=0
  1. . S ^VA(15,"ACMORS",(9999999-SCOR),I)=""
  1. S ^VA(15,"ACMORS",0)=DT
  1. Q
  1. ;
  1. ASKCMOR ;
  1. N DIR
  1. S DIR(0)="Y",DIR("A")="The CMOR scores for activity haven't been checked recently. Do you want to update these (It might take a couple of minutes)"
  1. S DIR("B")="YES"
  1. D ^DIR I Y>0 D SETCMOR
  1. Q
  1. ;
  1. SET1 ; HANDLES SETTING OF X-REF ON CMOR SCORES FOR POTENTIAL DUPLICATES
  1. I X'="P" Q
  1. N XDRXVAL,XDRXVAL1
  1. S XDRXVAL=^VA(15,D0,0)
  1. I $P($P(XDRXVAL,U),";",2)'="DPT(" Q
  1. S XDRXVAL1=$P($G(^DPT(+XDRXVAL,"MPI")),U,6) I XDRXVAL1="" S XDRXVAL1=-1
  1. S ^VA(15,"ACMORS",(9999999-XDRXVAL1),D0)=""
  1. S XDRXVAL1=$P($G(^DPT(+$P(XDRXVAL,U,2),"MPI")),U,6) I XDRXVAL1="" S XDRXVAL1=-1
  1. S ^VA(15,"ACMORS",(9999999-XDRXVAL1),D0)=""
  1. Q
  1. ;
  1. KILL1 ; HANDLES KILLING OF X-REF ON CMOR SCORES FOR POTENTIAL DUPLICATES
  1. I X'="P" Q
  1. N XDRXVAL,XDRXVAL1
  1. S XDRXVAL=^VA(15,D0,0)
  1. I $P($P(XDRXVAL,U),";",2)'="DPT(" Q
  1. S XDRXVAL1=+$P($G(^DPT(+XDRXVAL,"MPI")),U,6) I XDRXVAL1="" S XDRXVAL1=-1
  1. K ^VA(15,"ACMORS",(9999999-XDRXVAL1),D0)
  1. S XDRXVAL1=+$P($G(^DPT(+$P(XDRXVAL,U,2),"MPI")),U,6) I XDRXVAL1="" S XDRXVAL1=-1
  1. K ^VA(15,"ACMORS",(9999999-XDRXVAL1),D0)
  1. Q
  1. ;
  1. OTHERS ; CHECKS AND MARKS OTHER PAIRS SO ONLY ONE CAN BE PROCESSED AT A TIME
  1. Q ; NOT USED CURRENTLY
  1. ;
  1. ; P CLEAR ALL RELATED
  1. ;
  1. ; X MARK ALL RELATED
  1. ;
  1. ; V CLEAR TO
  1. ;
  1. ; O NOTHING
  1. ;
  1. ; R MARK ALL RELATED
  1. ;
  1. ; MERGED CLEAR TO REALIGN FROM
  1. I X="O" Q
  1. N OLDDA,OLDX S OLDDA=DA,OLDX=X N DA,X
  1. N XDRENTR,IENVAL,XDRPAIR,DONE,XDR0,STATUS,DIREC
  1. I $D(XDROTHER) Q
  1. N XDROTHER S XDROTHER=1
  1. I OLDX="P"!(OLDX="N") D Q
  1. . F XDRENTR=$P(^VA(15,OLDDA,0),U),$P(^VA(15,OLDDA,0),U,2) F IENVAL=0:0 S IENVAL=$O(^VA(15,"B",XDRENTR,IENVAL)) Q:IENVAL'>0 I IENVAL'=OLDDA,$P(^VA(15,IENVAL,0),U,3)="O" D
  1. . . ; Have to check on whether the other member of the pair in process as well.
  1. . . S XDRPAIR=$P(^VA(15,IENVAL,0),U) IF XDRPAIR=XDRENTR S XDRPAIR=$P(^(0),U,2)
  1. . . S DONE=0 F IENPAIR=0:0 S IENPAIR=$O(^VA(15,"B",XDRPAIR,IENPAIR)) Q:IENPAIR'>0 I IENPAIR'=IENVAL D Q:DONE
  1. . . . S XDR0=^VA(15,IENPAIR,0)
  1. . . . S STATUS=$P(XDR0,U,3)
  1. . . . I STATUS="X"!(STATUS="R") S DONE=1 Q
  1. . . . I STATUS="V" D Q:DONE
  1. . . . . S DIREC=$P(XDR0,U,4)
  1. . . . . I $P(XDR0,U,DIREC)=XDRPAIR S DONE=1 Q ; IT IS THE 'FROM' ENTRY
  1. . . . . Q
  1. . . . Q
  1. . . D RESET(IENVAL)
  1. . . Q
  1. . Q
  1. I OLDX="X"!(OLDX="R") D Q
  1. . F XDRENTR=$P(^VA(15,OLDDA,0),U),$P(^VA(15,OLDDA,0),U,2) F IENVAL=0:0 S IENVAL=$O(^VA(15,"B",XDRENTR,IENVAL)) Q:IENVAL'>0 I IENVAL'=OLDDA,$P(^VA(15,IENVAL,0),U,3)="P" D
  1. . . N XDRXX S XDRXX(15,IENVAL_",",.03)="O"
  1. . . D FILE^DIE("","XDRXX")
  1. . Q
  1. I OLDX="V"&$D(XDRDADJX) D Q ; IF MERGED (XDRDADJX IS SET IN XDRDAJD AND IS RUN BY A CROSS-REFERENCE FOR MERGE STATUS SET TO 'MERGED')
  1. . F XDRENTR=$P(^VA(15,OLDDA,0),U),$P(^VA(15,OLDDA,0),U,2) D
  1. . . S DIREC=$P(^VA(15,OLDDA,0),U,4)
  1. . . F IENVAL=0:0 S IENVAL=$O(^VA(15,"B",XDRENTR,IENVAL)) Q:IENVAL'>0 I IENVAL'=OLDDA,$P(^VA(15,IENVAL,0),U,3)="O" D
  1. . . . ; Have to check on whether the other member of the pair in process as well.
  1. . . . S XDRPAIR=$P(^VA(15,IENVAL,0),U) IF XDRPAIR=XDRENTR S XDRPAIR=$P(^(0),U,2)
  1. . . . S DONE=0 F IENPAIR=0:0 S IENPAIR=$O(^VA(15,"B",XDRPAIR,IENPAIR)) Q:IENPAIR'>0 I IENPAIR'=IENVAL D Q:DONE
  1. . . . . S XDR0=^VA(15,IENPAIR,0)
  1. . . . . S STATUS=$P(XDR0,U,3)
  1. . . . . I STATUS="X"!(STATUS="R") S DONE=1 Q
  1. . . . . I STATUS="V" D Q:DONE
  1. . . . . . S DIREC=$P(XDR0,U,4)
  1. . . . . . I $P(XDR0,U,DIREC)=XDRPAIR S DONE=1 Q ; IT IS THE 'FROM' ENTRY
  1. . . . . . Q
  1. . . . . Q
  1. . . . D RESET(IENVAL) ; RESET TO "P"
  1. . . . Q
  1. . . Q
  1. . Q
  1. Q
  1. ;
  1. RESET(DA) ;
  1. N XDRXX,IENS,X
  1. I $P(^VA(15,DA,0),U,5)>1 Q
  1. D NAME^XDRDEDT(DA)
  1. S X=^VA(15,DA,0)
  1. S IENS=DA_","
  1. S XDRXX(15,IENS,.03)="P"
  1. I $P(X,U,4)'="" S XDRXX(15,IENS,.04)="@"
  1. I $P(X,U,5)'="" S XDRXX(15,IENS,.05)="@"
  1. I $P(X,U,7)'="" S XDRXX(15,IENS,.07)="@"
  1. I $P(X,U,8)'="" S XDRXX(15,IENS,.08)="@"
  1. I $P(X,U,10)'="" S XDRXX(15,IENS,.1)="@"
  1. I $P(X,U,13)'="" S XDRXX(15,IENS,.13)="@"
  1. I $P(X,U,14)'="" S XDRXX(15,IENS,.14)="@"
  1. D FILE^DIE("","XDRXX")
  1. S:$D(DUZ) $P(^VA(15,DA,0),U,12)=DUZ
  1. K ^VA(15,DA,2)
  1. K ^VA(15,DA,3)
  1. Q