1 | XDRDPICK ;SF-IRMFO.SEA/JLI - SELECT A PAIR OF POTENTIAL DUPLICATES AND VIEW ;07/27/2000 09:56
|
---|
2 | ;;7.3;TOOLKIT;**23,47**;Apr 25, 1995
|
---|
3 | ;;
|
---|
4 | EN ;
|
---|
5 | N XDRFL,CMORS1,CMORS2,D0,DA,DIC,DIE,DIR,ICNT,ICNT1,JCNT,LCNT,NCNT,PNCT,TMPGLA,TMPGLB,XDRDA,XDRFILN,XDRGLB,Y,PRIFILE
|
---|
6 | ; D EN^XDRVCHEK
|
---|
7 | S XDRFL=$$FILE() Q:XDRFL'>0 S PRIFILE=XDRFL,XDRGLB=$P(^DIC(XDRFL,0,"GL"),U,2),XDRFILN=$P(^DIC(XDRFL,0),U)
|
---|
8 | LOOP ;
|
---|
9 | W !!!,"At the following prompt select a POTENTIAL DUPLICATE ENTRY. If a selection"
|
---|
10 | W !,"is not made, you will be given a chance to select from a list if you"
|
---|
11 | W !,"want to. Otherwise, you will be returned to the menu system."
|
---|
12 | W !
|
---|
13 | S Y=$$LOOKUP^XDRDEDT(XDRFL)
|
---|
14 | S XDRDA=+Y I Y>0 D SHOW G LOOP
|
---|
15 | S DIR(0)="Y"
|
---|
16 | S DIR("A")="Do you want to select from a list of potential duplicates"
|
---|
17 | S DIR("B")="YES"
|
---|
18 | D ^DIR K DIR Q:Y'>0
|
---|
19 | S TMPGLB=$NA(^TMP("XDRDPICK",$J)),TMPGLA=$NA(^TMP("XDRDPICA",$J))
|
---|
20 | K @TMPGLB,@TMPGLA
|
---|
21 | D ASK
|
---|
22 | I XDRDA>0 G LOOP
|
---|
23 | K PCNT
|
---|
24 | Q
|
---|
25 | ;
|
---|
26 | GETLIST ;
|
---|
27 | I XDRGLB="DPT(",$O(^DPT("ACMORS",0))>0 D CMORS Q
|
---|
28 | N FLG
|
---|
29 | F ICNT=ICNT:0 S ICNT=$O(^VA(15,ICNT)) Q:ICNT'>0 S X=^(ICNT,0) D Q:'(NCNT#4)&(NCNT>0)&FLG
|
---|
30 | . 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)
|
---|
31 | . I $P(X,U,3)'="P" S:PCNT=NCNT FLG=0 Q
|
---|
32 | . I $P($P(X,U),";",2)'=XDRGLB Q
|
---|
33 | . S NCNT=NCNT+1,X1=+$P(X,U),X2=+$P(X,U,2)
|
---|
34 | . I '($D(@(U_XDRGLB_X1_",0)"))#2)!'($D(@(U_XDRGLB_X2_",0)"))#2) S NCNT=NCNT-1 Q
|
---|
35 | . S @TMPGLB@(NCNT)=ICNT_U_X1_U_X2
|
---|
36 | . S @TMPGLB@(NCNT,1)=@(U_XDRGLB_X1_",0)")
|
---|
37 | . S @TMPGLB@(NCNT,2)=@(U_XDRGLB_X2_",0)")
|
---|
38 | Q
|
---|
39 | ;
|
---|
40 | ASK ;
|
---|
41 | S NCNT=0,ICNT=0,ICNT1=0,JCNT=0,XDRDA=0,PCNT=0
|
---|
42 | F D D CHEK Q:XDRDA'=0 Q:JCNT'>0
|
---|
43 | . D GETLIST
|
---|
44 | . S PCNT=NCNT
|
---|
45 | . F JCNT=JCNT:0 S JCNT=$O(@TMPGLB@(JCNT)) Q:JCNT'>0 D Q:'(JCNT#4)
|
---|
46 | . . W !!!,$J(JCNT,5),". ",@TMPGLB@(JCNT,1)
|
---|
47 | . . W !,?8,@TMPGLB@(JCNT,2)
|
---|
48 | I XDRDA>0 S XDRDA=+@TMPGLB@(XDRDA) D SHOW
|
---|
49 | Q
|
---|
50 | ;
|
---|
51 | CHEK ;
|
---|
52 | W !
|
---|
53 | I JCNT'>0 S DIR(0)="N"
|
---|
54 | E S DIR(0)="NO",DIR("A",1)="Enter Return to continue listing or"
|
---|
55 | S DIR("A")="Select the desired entry by number"
|
---|
56 | S DIR(0)=DIR(0)_"^1:"_NCNT
|
---|
57 | D ^DIR K DIR
|
---|
58 | I Y>0 S XDRDA=+Y
|
---|
59 | I $D(DUOUT)!$D(DTOUT) S XDRDA=-1 K DTOUT,DUOUT
|
---|
60 | K DIRUT
|
---|
61 | Q
|
---|
62 | ;
|
---|
63 | SHOW ;
|
---|
64 | ;L +^VA(15,+XDRDA,0):30 I '$T G BUSY
|
---|
65 | ;I $P(^VA(15,+XDRDA,0),U,3)'="P" L -^VA(15,+XDRDA,0) G BUSY ; NOT AVAILABLE
|
---|
66 | ;N XDRXX S XDRXX(15,(+XDRDA)_",",.03)="X"
|
---|
67 | ;D FILE^DIE("","XDRXX")
|
---|
68 | ;L -^VA(15,+XDRDA,0)
|
---|
69 | I '$D(XDRGLB) N XDRGLB S XDRGLB=$P($P(^VA(15,XDRDA,0),U),";",2)
|
---|
70 | 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
|
---|
71 | S XQAID=""
|
---|
72 | S X=^VA(15,+XDRDA,0)
|
---|
73 | S X1=+X,X2=+$P(X,U,2)
|
---|
74 | I $$COUNT^XDRRMRG2(XDRFL,X1,X2)>1 S X1=X2,X2=+X
|
---|
75 | S XQADATA=XDRDA_U_X1_";"_X2_U_"PRIMARY"_U_XDRFL
|
---|
76 | D ^XDRRMRG1
|
---|
77 | S DA=$$FIND1^DIC(15.02,","_XDRDA_",","X","PRIMARY")
|
---|
78 | I DA>0 D
|
---|
79 | . S X=$P(^VA(15,XDRDA,0),U,3)
|
---|
80 | . I X="N"!(X="V") Q
|
---|
81 | . S X=^VA(15,XDRDA,2,DA,0)
|
---|
82 | . I $P(X,U,2)="V" D
|
---|
83 | . . S DR=".03///X;.1///"_DT_";"
|
---|
84 | . . S DIE="^VA(15,",DA=XDRDA D ^DIE K DIE,DR
|
---|
85 | . . D SETUP^XDRRMRG1(XDRDA)
|
---|
86 | . . D CHEKVER^XDRRMRG1
|
---|
87 | Q
|
---|
88 | ;
|
---|
89 | BUSY ;
|
---|
90 | W !!,$C(7),"Record is being processed by someone else.",!!
|
---|
91 | Q
|
---|
92 | ;
|
---|
93 | FILE() ;
|
---|
94 | N X
|
---|
95 | S X=0
|
---|
96 | F I=0:0 S I=$O(^VA(15.1,I)) Q:I'>0 S X=X+1,X(I)=""
|
---|
97 | I X=1 Q $O(X(""))
|
---|
98 | K DIC S DIC=15.1,DIC(0)="AEQM",DIC("A")="Which FILE are the potential duplicates in (e.g., PATIENT)? ",DIC("B")="PATIENT" D ^DIC K DIC
|
---|
99 | Q +Y
|
---|
100 | ;
|
---|
101 | CMORS ; RETURN DATA RANKED BY CMORS (HIGH VALUES FIRST)
|
---|
102 | I '$D(^VA(15,"ACMORS")) D SETCMOR
|
---|
103 | I $G(^VA(15,"ACMORS",0))'>0 D SETCMOR
|
---|
104 | I $G(^VA(15,"ACMORS",0))>0,$$FMDIFF^XLFDT(DT,^(0))>7 D ASKCMOR
|
---|
105 | I ICNT1>0 S ICNT=ICNT-1
|
---|
106 | S LCNT=0
|
---|
107 | F ICNT=ICNT:0 S ICNT=$O(^VA(15,"ACMORS",ICNT)) Q:ICNT'>0 D Q:('(NCNT#4))&(LCNT>0)
|
---|
108 | . F ICNT1=+ICNT1:0 S ICNT1=$O(^VA(15,"ACMORS",ICNT,ICNT1)) Q:ICNT1'>0 D Q:('(NCNT#4))&(LCNT>0)
|
---|
109 | . . S X=$G(^VA(15,ICNT1,0)) Q:X="" Q:$P(X,U,3)'="P" S X1=+X,X2=+$P(X,U,2)
|
---|
110 | . . I $D(@TMPGLA@(X1,X2)) Q
|
---|
111 | . . S @TMPGLA@(X1,X2)=""
|
---|
112 | . . S NCNT=NCNT+1,LCNT=LCNT+1
|
---|
113 | . . S @TMPGLB@(NCNT)=ICNT1_U_X1_U_X2
|
---|
114 | . . S CMORS1=$P($G(^DPT(X1,"MPI")),U,6),CMORS2=$P($G(^DPT(X2,"MPI")),U,6)
|
---|
115 | . . S @TMPGLB@(NCNT,1)=@(U_XDRGLB_X1_",0)")_" (CMOR SCORE = "_$S(CMORS1="":"NULL",1:CMORS1)_")"
|
---|
116 | . . S @TMPGLB@(NCNT,2)=@(U_XDRGLB_X2_",0)")_" (CMOR SCORE = "_$S(CMORS2="":"NULL",1:CMORS2)_")"
|
---|
117 | Q
|
---|
118 | ;
|
---|
119 | SETCMOR ;
|
---|
120 | N I,X,X1,X2,SCOR
|
---|
121 | K ^VA(15,"ACMORS")
|
---|
122 | F I=0:0 S I=$O(^VA(15,I)) Q:I'>0 S X=^(I,0) D
|
---|
123 | . I $P(X,U,3)'="P" Q
|
---|
124 | . I $P($P(X,U),";",2)'="DPT(" Q
|
---|
125 | . S X1=+X,X2=+$P(X,U,2)
|
---|
126 | . S SCOR=$P($G(^DPT(X1,"MPI")),U,6) I SCOR'>0 S SCOR=0
|
---|
127 | . S ^VA(15,"ACMORS",(9999999-SCOR),I)=""
|
---|
128 | . S SCOR=$P($G(^DPT(X2,"MPI")),U,6) I SCOR'>0 S SCOR=0
|
---|
129 | . S ^VA(15,"ACMORS",(9999999-SCOR),I)=""
|
---|
130 | S ^VA(15,"ACMORS",0)=DT
|
---|
131 | Q
|
---|
132 | ;
|
---|
133 | ASKCMOR ;
|
---|
134 | N DIR
|
---|
135 | 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)"
|
---|
136 | S DIR("B")="YES"
|
---|
137 | D ^DIR I Y>0 D SETCMOR
|
---|
138 | Q
|
---|
139 | ;
|
---|
140 | SET1 ; HANDLES SETTING OF X-REF ON CMOR SCORES FOR POTENTIAL DUPLICATES
|
---|
141 | I X'="P" Q
|
---|
142 | N XDRXVAL,XDRXVAL1
|
---|
143 | S XDRXVAL=^VA(15,D0,0)
|
---|
144 | I $P($P(XDRXVAL,U),";",2)'="DPT(" Q
|
---|
145 | S XDRXVAL1=$P($G(^DPT(+XDRXVAL,"MPI")),U,6) I XDRXVAL1="" S XDRXVAL1=-1
|
---|
146 | S ^VA(15,"ACMORS",(9999999-XDRXVAL1),D0)=""
|
---|
147 | S XDRXVAL1=$P($G(^DPT(+$P(XDRXVAL,U,2),"MPI")),U,6) I XDRXVAL1="" S XDRXVAL1=-1
|
---|
148 | S ^VA(15,"ACMORS",(9999999-XDRXVAL1),D0)=""
|
---|
149 | Q
|
---|
150 | ;
|
---|
151 | KILL1 ; HANDLES KILLING OF X-REF ON CMOR SCORES FOR POTENTIAL DUPLICATES
|
---|
152 | I X'="P" Q
|
---|
153 | N XDRXVAL,XDRXVAL1
|
---|
154 | S XDRXVAL=^VA(15,D0,0)
|
---|
155 | I $P($P(XDRXVAL,U),";",2)'="DPT(" Q
|
---|
156 | S XDRXVAL1=+$P($G(^DPT(+XDRXVAL,"MPI")),U,6) I XDRXVAL1="" S XDRXVAL1=-1
|
---|
157 | K ^VA(15,"ACMORS",(9999999-XDRXVAL1),D0)
|
---|
158 | S XDRXVAL1=+$P($G(^DPT(+$P(XDRXVAL,U,2),"MPI")),U,6) I XDRXVAL1="" S XDRXVAL1=-1
|
---|
159 | K ^VA(15,"ACMORS",(9999999-XDRXVAL1),D0)
|
---|
160 | Q
|
---|
161 | ;
|
---|
162 | OTHERS ; CHECKS AND MARKS OTHER PAIRS SO ONLY ONE CAN BE PROCESSED AT A TIME
|
---|
163 | Q ; NOT USED CURRENTLY
|
---|
164 | ;
|
---|
165 | ; P CLEAR ALL RELATED
|
---|
166 | ;
|
---|
167 | ; X MARK ALL RELATED
|
---|
168 | ;
|
---|
169 | ; V CLEAR TO
|
---|
170 | ;
|
---|
171 | ; O NOTHING
|
---|
172 | ;
|
---|
173 | ; R MARK ALL RELATED
|
---|
174 | ;
|
---|
175 | ; MERGED CLEAR TO REALIGN FROM
|
---|
176 | I X="O" Q
|
---|
177 | N OLDDA,OLDX S OLDDA=DA,OLDX=X N DA,X
|
---|
178 | N XDRENTR,IENVAL,XDRPAIR,DONE,XDR0,STATUS,DIREC
|
---|
179 | I $D(XDROTHER) Q
|
---|
180 | N XDROTHER S XDROTHER=1
|
---|
181 | I OLDX="P"!(OLDX="N") D Q
|
---|
182 | . 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
|
---|
183 | . . ; Have to check on whether the other member of the pair in process as well.
|
---|
184 | . . S XDRPAIR=$P(^VA(15,IENVAL,0),U) IF XDRPAIR=XDRENTR S XDRPAIR=$P(^(0),U,2)
|
---|
185 | . . S DONE=0 F IENPAIR=0:0 S IENPAIR=$O(^VA(15,"B",XDRPAIR,IENPAIR)) Q:IENPAIR'>0 I IENPAIR'=IENVAL D Q:DONE
|
---|
186 | . . . S XDR0=^VA(15,IENPAIR,0)
|
---|
187 | . . . S STATUS=$P(XDR0,U,3)
|
---|
188 | . . . I STATUS="X"!(STATUS="R") S DONE=1 Q
|
---|
189 | . . . I STATUS="V" D Q:DONE
|
---|
190 | . . . . S DIREC=$P(XDR0,U,4)
|
---|
191 | . . . . I $P(XDR0,U,DIREC)=XDRPAIR S DONE=1 Q ; IT IS THE 'FROM' ENTRY
|
---|
192 | . . . . Q
|
---|
193 | . . . Q
|
---|
194 | . . D RESET(IENVAL)
|
---|
195 | . . Q
|
---|
196 | . Q
|
---|
197 | I OLDX="X"!(OLDX="R") D Q
|
---|
198 | . 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
|
---|
199 | . . N XDRXX S XDRXX(15,IENVAL_",",.03)="O"
|
---|
200 | . . D FILE^DIE("","XDRXX")
|
---|
201 | . Q
|
---|
202 | 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')
|
---|
203 | . F XDRENTR=$P(^VA(15,OLDDA,0),U),$P(^VA(15,OLDDA,0),U,2) D
|
---|
204 | . . S DIREC=$P(^VA(15,OLDDA,0),U,4)
|
---|
205 | . . 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
|
---|
206 | . . . ; Have to check on whether the other member of the pair in process as well.
|
---|
207 | . . . S XDRPAIR=$P(^VA(15,IENVAL,0),U) IF XDRPAIR=XDRENTR S XDRPAIR=$P(^(0),U,2)
|
---|
208 | . . . S DONE=0 F IENPAIR=0:0 S IENPAIR=$O(^VA(15,"B",XDRPAIR,IENPAIR)) Q:IENPAIR'>0 I IENPAIR'=IENVAL D Q:DONE
|
---|
209 | . . . . S XDR0=^VA(15,IENPAIR,0)
|
---|
210 | . . . . S STATUS=$P(XDR0,U,3)
|
---|
211 | . . . . I STATUS="X"!(STATUS="R") S DONE=1 Q
|
---|
212 | . . . . I STATUS="V" D Q:DONE
|
---|
213 | . . . . . S DIREC=$P(XDR0,U,4)
|
---|
214 | . . . . . I $P(XDR0,U,DIREC)=XDRPAIR S DONE=1 Q ; IT IS THE 'FROM' ENTRY
|
---|
215 | . . . . . Q
|
---|
216 | . . . . Q
|
---|
217 | . . . D RESET(IENVAL) ; RESET TO "P"
|
---|
218 | . . . Q
|
---|
219 | . . Q
|
---|
220 | . Q
|
---|
221 | Q
|
---|
222 | ;
|
---|
223 | RESET(DA) ;
|
---|
224 | N XDRXX,IENS,X
|
---|
225 | I $P(^VA(15,DA,0),U,5)>1 Q
|
---|
226 | D NAME^XDRDEDT(DA)
|
---|
227 | S X=^VA(15,DA,0)
|
---|
228 | S IENS=DA_","
|
---|
229 | S XDRXX(15,IENS,.03)="P"
|
---|
230 | I $P(X,U,4)'="" S XDRXX(15,IENS,.04)="@"
|
---|
231 | I $P(X,U,5)'="" S XDRXX(15,IENS,.05)="@"
|
---|
232 | I $P(X,U,7)'="" S XDRXX(15,IENS,.07)="@"
|
---|
233 | I $P(X,U,8)'="" S XDRXX(15,IENS,.08)="@"
|
---|
234 | I $P(X,U,10)'="" S XDRXX(15,IENS,.1)="@"
|
---|
235 | I $P(X,U,13)'="" S XDRXX(15,IENS,.13)="@"
|
---|
236 | I $P(X,U,14)'="" S XDRXX(15,IENS,.14)="@"
|
---|
237 | D FILE^DIE("","XDRXX")
|
---|
238 | S:$D(DUZ) $P(^VA(15,DA,0),U,12)=DUZ
|
---|
239 | K ^VA(15,DA,2)
|
---|
240 | K ^VA(15,DA,3)
|
---|
241 | Q
|
---|