XDRMERGB ;SF-IRMFO.SEA/JLI - TENATIVE UPDATE POINTER NODES ;5/14/98 10:30
;;7.3;TOOLKIT;**23,137**;Apr 25, 1995;Build 11
;;
Q
;
MERGEIT ; MERGE TWO ENTRIES IN FILE
N NODE,NODE1,NODE2,NODEA,SFILE,XDRFROM,XDRTO,NODEA,VALUE,XVALUE,XDRXX,NODEB,DIK,DA,I,Y,VREF,XNN,XFILNO,IENTOSTR,DFN,XDRZZ
N XDRAA ; DEBUG STATEMENT
;
S XFILNO=+$P(@(XDRDIC_"0)"),U,2)
S IENTOSTR=IENTO_","_XDRIENS
S DFN=IENTO
;
; NOW MERGE DATA GOING NODE BY NODE
;
S NODE=""
F D Q:NODE=""
. S NODE1=$O(@(XDRDIC_IENFROM_","""_NODE_""")"))
. I NODE1="" S NODE="" Q ; NOTHING MORE TO MOVE OVER
. S NODE2=$O(@(XDRDIC_IENTO_","""_NODE_""")"))
. I NODE2'="",NODE1]NODE2 S NODE=NODE2 Q ; NODE ON TO, BUT NOT ON FROM - GO TO NEXT
. S NODE=NODE1
. I $D(@(XDRDIC_IENFROM_","""_NODE_""")"))=1 D Q ; SINGLE NODE, MERGE DATA
. . I NODE2]NODE1!(NODE2="") D Q ; MISSING NODE, JUST MOVE IT OVER
. . . N XDRXX,FLD,N,J
. . . F N=0:0 S N=$O(^DD(XFILNO,"GL",NODE,N)) Q:N'>0 S FLD=$O(^(N,0)) I $O(^DD(XFILNO,FLD,1,0))>0 D
. . . . S X=0 F J=0:0 S J=$O(^DD(XFILNO,FLD,1,J)) Q:J'>0 I $O(^(J,0))>0 S X=1 Q
. . . . I X>0 D
. . . . . S XDRXX(XFILNO,IENTOSTR,FLD)=$P(@(XDRDIC_IENFROM_","""_NODE_""")"),U,N)
. . . K XDRAA I $D(XDRTESTK),$D(XDRXX) M XDRAA=XDRXX ; DEBUT STATEMENT
. . . K XDRZZ
. . . I $D(XDRXX) D FILE^DIE("","XDRXX","XDRZZ")
. . . I $D(XDRTESTK),$D(XDRZZ) S XDRTESTK=XDRTESTK+1 M ^XTMP("XDRTESTK",$$NOW^XLFDT(),XDRTESTK,"XX")=XDRAA,^("ZZ")=XDRZZ ; DEBUG STATMENT
. . . M @(XDRDIC_IENTO_","""_NODE_""")")=@(XDRDIC_IENFROM_","""_NODE_""")")
. . I $D(@(XDRDIC_IENTO_","""_NODE_""")"))>1 Q ; MISMATCH SO QUIT
. . N XDRXX,FLD
. . S X1=@(XDRDIC_IENFROM_","""_NODE_""")")
. . S (X2,X3)=@(XDRDIC_IENTO_","""_NODE_""")")
. . F I=1:1 Q:X1="" S X=$P(X1,U),X1=$P(X1,U,2,999) I X'="" D
. . . S Y=$P(X2,U,I)
. . . I Y="" D
. . . . ;S $P(X2,U,I)=X ;LLS 26-OCT-2013 replaced with conditional SET below
. . . . S FLD=$O(^DD(XFILNO,"GL",NODE,I,0)) S JXFLD=FLD
. . . . I (XFILNO'=2)!(FLD'=.6) S $P(X2,U,I)=X ;LLS 26-OCT-2013 - replaced set of X2 so do not move 'test patient indicator'
. . . . I XFILNO=2,FLD=.6 Q ;LLS 26-OCT-2013 - Do not want to move 'test patient indicator'
. . . . I FLD>0,$O(^DD(XFILNO,FLD,1,0))>0 S XDRXX(XFILNO,IENTOSTR,FLD)=X
. . I X2'=X3 D
. . . I $D(XDRXX) D
. . . . K XDRAA I $D(XDRTESTK) M XDRAA=XDRXX ; DEBUG STATEMENT
. . . . K XDRZZ
. . . . N X2 D FILE^DIE("","XDRXX","XDRZZ")
. . . . I $D(XDRTESTK),$D(XDRZZ) S XDRTESTK=XDRTESTK+1 M ^XTMP("XDRTESTK",$$NOW^XLFDT(),XDRTESTK,"XX")=XDRAA,^("ZZ")=XDRZZ ; DEBUG STATMENT
. . . S @(XDRDIC_IENTO_","""_NODE_""")")=X2 ; SET MERGED DATA ON NODE
. ;
. ; THE FOLLOWING HANDLES NODES THAT HAVE MULTIPLES
. ;
. S XDRFROM=XDRDIC_IENFROM_","""_NODE_""","
. S XDRTO=XDRDIC_IENTO_","""_NODE_""","
. I NODE="DIS",XFILNO=2 D DODIS^XDRMERGA Q
. S IENTOSTR=IENTO_","_XDRIENS
. D DOSUBS^XDRMERGA(XDRFROM,XDRTO,IENTOSTR,IENTO)
S XDRXX=$P(@(XDRDIC_IENFROM_",0)"),U)
K DA N DIU S DIU(0)=1 S DIK=XDRDIC,DA=IENFROM,DFN=DA D ^DIK ; KILL OFF MERGED FROM ENTRY
S @(XDRDIC_IENFROM_",0)")=XDRXX
Q
;
SAVEMERG(FILE,IENFROM,IENTO) ;
N IENS,XDRFILE,YYY,ZZZ,XDRFDA,FROMARG,TOARG,XDRDA,Q,Q1,IENVAL,XDRSUB
S FROMARG=$O(@FROM@(IENFROM,IENTO,"")) Q:FROMARG=""
S TOARG=$O(@FROM@(IENFROM,IENTO,FROMARG,""))
S XDRDA=$$FIND1^DIC(15.4,"","Q",FROMARG)
I XDRDA>0,$P(^XDRM(XDRDA,0),U)'=FROMARG S XDRDA=0
I XDRDA'>0 D
. N XDRFDA
. S XDRFDA(15.4,"+1,",.01)=FROMARG
. S XDRFDA(15.4,"+1,",.02)=TOARG
. S XDRFDA(15.4,"+1,",.03)=DT
. D UPDATE^DIE("","XDRFDA","YYY") S IENS=YYY(1)
. S XDRDA=YYY(1)
S XDRFILE=$P(^DIC(FILE,0),U)
S IENS=$$FIND1^DIC(15.41,","_XDRDA_",","Q",XDRFILE)
I IENS'>0 D
. S IENS="+1,"_XDRDA_","
. S XDRFDA(15.41,IENS,.01)=XDRFILE
. I IENFROM>0 S XDRFDA(15.41,IENS,.02)=IENFROM
. K YYY
. D UPDATE^DIE("","XDRFDA","YYY","ZZZ") S IENS=YYY(1)
I IENFROM>0 D
. S XDRSUB=15.411,IENVAL=IENFROM
. D STORMERG
K XDRFDA
S IENS=$$FIND1^DIC(15.42,","_XDRDA_",","Q",XDRFILE)
I IENS'>0 D
. S IENS="+1,"_XDRDA_","
. S XDRFDA(15.42,IENS,.01)=XDRFILE
. I IENTO>0 S XDRFDA(15.42,IENS,.02)=IENTO
. K YYY,ZZZ
. D UPDATE^DIE("","XDRFDA","YYY","ZZZ") S IENS=YYY(1)
I IENTO>0 D
. S XDRSUB=15.421,IENVAL=IENTO
. D STORMERG
Q
STORMERG ;
K ^VA(15.4,XDRDA,$S(XDRSUB=15.411:1,1:2),IENS,1) ; REMOVE ANY PREVIOUS TRIES
S IENS="+1,"_IENS_","_XDRDA_","
S Q=^DIC(FILE,0,"GL")_IENVAL_")",Q1=$E(Q,1,$L(Q)-1)
F S Q=$Q(@Q) Q:Q'[Q1 D
. K XDRFDA
. S XDRFDA(XDRSUB,IENS,.01)=$E(Q,2,$L(Q))
. I @Q'="" S XDRFDA(XDRSUB,IENS,1.01)=@Q
. D UPDATE^DIE("","XDRFDA")
Q
;
SAVEPNTR(IENFROM,IENTO,FILE,IENS,FIELD,VALUE) ;
N XDRFDA,XDRDA,FROMARG
S FROMARG=$O(@FROM@(IENFROM,IENTO,"")) Q:FROMARG=""
S XDRDA=$$FIND1^DIC(15.4,"","Q",FROMARG)
S X=FILE_";"_IENS_";"_FIELD
S XDRFDA(15.43,"+1,"_XDRDA_",",.01)=X
S XDRFDA(15.43,"+1,"_XDRDA_",",1.01)=VALUE
D UPDATE^DIE("","XDRFDA")
Q
SNDMSG(XDRFDA) ;Sends msg when merge process has completed.
N XDRGRP,XMTEXT,XMSUB,XMDUZ,XDRNAME
S XDRNAME=$$GET1^DIQ(15.2,XDRFDA,.01)
S R(1,0)=XDRNAME_" merge process has completed."
S XDRGRP=$$GET1^DIQ(15.1,"2,",.29,"I")
S:XDRGRP>0 XDRGRPN=$$GET1^DIQ(3.8,XDRGRP,.01)
S XDRGRP=$S(XDRGRP>0:"G."_XDRGRPN,1:"")
S:XDRGRP'="" XMY(XDRGRP)=""
S:XDRGRP="" XMY(.5)="" ;If no mail grp found, send msg to postmaster
S XMTEXT="R(",XMSUB=XDRNAME_" Completed",XMDUZ=.5,XMCHAN=1
D ^XMD
Q
;
QUE ; (Moved from XDRMERG0)
;
N XDRXX,XDRYY,XDRMA,DIE,DIC,DIR,DR,ZTDTH,ZTSK
N XDRX,XDRY,XDRFIL,XDRGLOB,X,Y,XDRNAME
N XDRFDA,XDRIENS,XDRI,XDRJ,XDRK,DA,DIK
;
S XDRFIL=$$FILE^XDRDPICK() Q:XDRFIL'>0
I XDRFIL=2 D Q:Y
. N X,XDRKEY
. S (X,XDRKEY)=0 F S X=$O(^VA(200,DUZ,51,"B",X)) Q:X'>0!(XDRKEY) D
. . I $$GET1^DIQ(19.1,X,.01)="DG ELIGIBILITY" S XDRKEY=1
. . Q
. S Y=0 I 'XDRKEY W !!,"You should hold the 'DG ELIGIBILITY' key to run a patient file merge." S Y=1
. Q
S XDRDIC=^DIC(XDRFIL,0,"GL")
S XDRGLOB=$E(XDRDIC,2,999)
S X=""
S XNCNT=0,XNCNT0=0
F S X=$O(^VA(15,"AVDUP",XDRGLOB,X)) Q:X="" S Y=$O(^(X,0)) D
. N YVAL S YVAL=^VA(15,Y,0)
. I $P(YVAL,U,20)>0 Q ; ALREADY DONE OR SCHEDULED
. I $P(YVAL,U,3)'="V" Q ; TAKE ONLY VERIFIED
. I $P(YVAL,U,5)'=1 Q ; TAKE ONLY IF MARKED READY TO MERGE
. I $P(YVAL,U,13)>0 D
. . I '$D(@(XDRDIC_(+YVAL)_",0)"))!'$D(@(XDRDIC_(+$P(YVAL,U,2))_",0)")) Q
. . I $P(YVAL,U,4)'=2 S XDRX(+YVAL,+$P(YVAL,U,2))=Y ; get ien numbers from duplicate file
. . E S XDRX(+$P(YVAL,U,2),+YVAL)=Y ; Reverse - merge to switched
. . S XNCNT=XNCNT+1
W !!,XNCNT," Entries Ready to be included in merge"
I $O(XDRX(0))'>0 D Q
. W !!?15,$C(7),"No Verified Duplicates included in merge",$C(7),!!
;
K DIR S DIR(0)="Y"
S DIR("A",1)="This process will take a **LONG** time (usually over 15 hours, and sometimes"
S DIR("A",2)="considerably longer), but you CAN stop and restart the process when you"
S DIR("A")="want using the options. OK"
D ^DIR K DIR Q:Y'>0
NAME W !! S DIR(0)="F^2:30"
S DIR("A")="Name for Merge Process"
S DIR("?",1)="Enter a unique name by which the MERGE PROCESS will be identified"
S DIR("?")="This name should be 2 to 30 characters in length"
D ^DIR
K DIR Q:Y=U S XDRNAME=Y
I $$FIND1^DIC(15.2,",","Q",XDRNAME)>0 D G NAME
. W !!,$C(7),"The name entered has already been used. The name must be unique.",!!
;
; CREATE PROCESS ENTRY
;
S XDRXX(15.2,"+1,",.01)=XDRNAME
S XDRXX(15.2,"+1,",.02)=XDRFIL
D UPDATE^DIE("","XDRXX","XDRYY","XDRMA")
S XDRFDA=$G(XDRYY(1))
;
; NOW MOVE LIST OF DUPLICATES TO BE PROCESSED INTO THIS ENTRY
S XDRIENS="+1,"_XDRFDA_","
F XDRI=0:0 S XDRI=$O(XDRX(XDRI)) Q:XDRI'>0 D
. S XDRJ=$O(XDRX(XDRI,0))
. S XDRK=XDRX(XDRI,XDRJ)
. K XDRXX,XDRYY
. S XDRXX(15.22,XDRIENS,.01)=XDRI ; IEN1
. S XDRXX(15.22,XDRIENS,.02)=XDRJ ; IEN2
. S XDRXX(15.22,XDRIENS,.03)=XDRK ; ENTRY # IN FILE 15
. D UPDATE^DIE("","XDRXX","XDRYY","XDRMA")
. K XDRXX,XDRYY,XDRMA
. ; AND MARK THEM AS IN THIS MERGE PROCESS IN FILE 15
. S XDRXX(15,XDRK_",",.05)=3
. S XDRXX(15,XDRK_",",.2)=XDRFDA
. D FILE^DIE("","XDRXX")
. ; JLI 3/12/98 - FOR SOME REASON THE .05 FIELD STILL DOESN'T SEEM TO BE GETTING SET TO 3, SO CHECK IT AND IF THAT IS THE CASE, HARDSET IT.
. I $P(^VA(15,XDRK,0),U,5)'=3 S $P(^(0),U,5)=3
;
K DR S DR=".03;.04///S;" ; GET DESIRED START TIME AND MARK PROCESS AS SCHEDULED
S DIE="^VA(15.2,"
S DA=XDRFDA
D ^DIE
S ZTDTH=$P(^VA(15.2,XDRFDA,0),U,3) ; TAKE DESIRED TIME
I ZTDTH>0 D Q:$G(ZTSK)>0 ; AND SET UP TASK
. S ZTRTN="DQ^XDRMERG0",ZTDESC="MERGE PROCESS "_XDRNAME
. S ZTIO="NULL",ZTSAVE("XDRFDA")=""
. D ^%ZTLOAD
. I $G(ZTSK)>0 D
. . K DR S DR=".08///"_ZTSK_";",DIE="^VA(15.2,",DA=XDRFDA D ^DIE
. . W !!,"Merge process '",$P(^VA(15.2,XDRFDA,0),U),"' for Verified Duplicates in File ",XDRFIL," scheduled",!,"as task ",ZTSK,".",!
;
; TASK INFO, TIME, ETC. NOT COMPLETE - SO REVERSE IT
;
F XDRI=0:0 S XDRI=$O(XDRX(XDRI)) Q:XDRI'>0 D
. S XDRJ=$O(XDRX(XDRI,0))
. S XDRK=XDRX(XDRI,XDRJ)
. K XDRXX,XDRYY
. S XDRXX(15,XDRK_",",.2)="@" ; UNMARK ENTRY IN FILE 15
. S XDRXX(15,XDRK_",",.05)=1
. D UPDATE^DIE("","XDRXX")
S DA=XDRFDA
S DIK="^VA(15.2,"
D ^DIK
W !!,$C(7),"The Merge Process has been aborted, no changes made."
Q
;
XDRMERGB ;SF-IRMFO.SEA/JLI - TENATIVE UPDATE POINTER NODES ;5/14/98 10:30
+1 ;;7.3;TOOLKIT;**23,137**;Apr 25, 1995;Build 11
+2 ;;
+3 QUIT
+4 ;
MERGEIT ; MERGE TWO ENTRIES IN FILE
+1 NEW NODE,NODE1,NODE2,NODEA,SFILE,XDRFROM,XDRTO,NODEA,VALUE,XVALUE,XDRXX,NODEB,DIK,DA,I,Y,VREF,XNN,XFILNO,IENTOSTR,DFN,XDRZZ
+2 ; DEBUG STATEMENT
NEW XDRAA
+3 ;
+4 SET XFILNO=+$PIECE(@(XDRDIC_"0)"),U,2)
+5 SET IENTOSTR=IENTO_","_XDRIENS
+6 SET DFN=IENTO
+7 ;
+8 ; NOW MERGE DATA GOING NODE BY NODE
+9 ;
+10 SET NODE=""
+11 FOR
Begin DoDot:1
+12 SET NODE1=$ORDER(@(XDRDIC_IENFROM_","""_NODE_""")"))
+13 ; NOTHING MORE TO MOVE OVER
IF NODE1=""
SET NODE=""
QUIT
+14 SET NODE2=$ORDER(@(XDRDIC_IENTO_","""_NODE_""")"))
+15 ; NODE ON TO, BUT NOT ON FROM - GO TO NEXT
IF NODE2'=""
IF NODE1]NODE2
SET NODE=NODE2
QUIT
+16 SET NODE=NODE1
+17 ; SINGLE NODE, MERGE DATA
IF $DATA(@(XDRDIC_IENFROM_","""_NODE_""")"))=1
Begin DoDot:2
+18 ; MISSING NODE, JUST MOVE IT OVER
IF NODE2]NODE1!(NODE2="")
Begin DoDot:3
+19 NEW XDRXX,FLD,N,J
+20 FOR N=0:0
SET N=$ORDER(^DD(XFILNO,"GL",NODE,N))
IF N'>0
QUIT
SET FLD=$ORDER(^(N,0))
IF $ORDER(^DD(XFILNO,FLD,1,0))>0
Begin DoDot:4
+21 SET X=0
FOR J=0:0
SET J=$ORDER(^DD(XFILNO,FLD,1,J))
IF J'>0
QUIT
IF $ORDER(^(J,0))>0
SET X=1
QUIT
+22 IF X>0
Begin DoDot:5
+23 SET XDRXX(XFILNO,IENTOSTR,FLD)=$PIECE(@(XDRDIC_IENFROM_","""_NODE_""")"),U,N)
End DoDot:5
End DoDot:4
+24 ; DEBUT STATEMENT
KILL XDRAA
IF $DATA(XDRTESTK)
IF $DATA(XDRXX)
MERGE XDRAA=XDRXX
+25 KILL XDRZZ
+26 IF $DATA(XDRXX)
DO FILE^DIE("","XDRXX","XDRZZ")
+27 ; DEBUG STATMENT
IF $DATA(XDRTESTK)
IF $DATA(XDRZZ)
SET XDRTESTK=XDRTESTK+1
MERGE ^XTMP("XDRTESTK",$$NOW^XLFDT(),XDRTESTK,"XX")=XDRAA,^("ZZ")=XDRZZ
+28 MERGE @(XDRDIC_IENTO_","""_NODE_""")")=@(XDRDIC_IENFROM_","""_NODE_""")")
End DoDot:3
QUIT
+29 ; MISMATCH SO QUIT
IF $DATA(@(XDRDIC_IENTO_","""_NODE_""")"))>1
QUIT
+30 NEW XDRXX,FLD
+31 SET X1=@(XDRDIC_IENFROM_","""_NODE_""")")
+32 SET (X2,X3)=@(XDRDIC_IENTO_","""_NODE_""")")
+33 FOR I=1:1
IF X1=""
QUIT
SET X=$PIECE(X1,U)
SET X1=$PIECE(X1,U,2,999)
IF X'=""
Begin DoDot:3
+34 SET Y=$PIECE(X2,U,I)
+35 IF Y=""
Begin DoDot:4
+36 ;S $P(X2,U,I)=X ;LLS 26-OCT-2013 replaced with conditional SET below
+37 SET FLD=$ORDER(^DD(XFILNO,"GL",NODE,I,0))
SET JXFLD=FLD
+38 ;LLS 26-OCT-2013 - replaced set of X2 so do not move 'test patient indicator'
IF (XFILNO'=2)!(FLD'=.6)
SET $PIECE(X2,U,I)=X
+39 ;LLS 26-OCT-2013 - Do not want to move 'test patient indicator'
IF XFILNO=2
IF FLD=.6
QUIT
+40 IF FLD>0
IF $ORDER(^DD(XFILNO,FLD,1,0))>0
SET XDRXX(XFILNO,IENTOSTR,FLD)=X
End DoDot:4
End DoDot:3
+41 IF X2'=X3
Begin DoDot:3
+42 IF $DATA(XDRXX)
Begin DoDot:4
+43 ; DEBUG STATEMENT
KILL XDRAA
IF $DATA(XDRTESTK)
MERGE XDRAA=XDRXX
+44 KILL XDRZZ
+45 NEW X2
DO FILE^DIE("","XDRXX","XDRZZ")
+46 ; DEBUG STATMENT
IF $DATA(XDRTESTK)
IF $DATA(XDRZZ)
SET XDRTESTK=XDRTESTK+1
MERGE ^XTMP("XDRTESTK",$$NOW^XLFDT(),XDRTESTK,"XX")=XDRAA,^("ZZ")=XDRZZ
End DoDot:4
+47 ; SET MERGED DATA ON NODE
SET @(XDRDIC_IENTO_","""_NODE_""")")=X2
End DoDot:3
End DoDot:2
QUIT
+48 ;
+49 ; THE FOLLOWING HANDLES NODES THAT HAVE MULTIPLES
+50 ;
+51 SET XDRFROM=XDRDIC_IENFROM_","""_NODE_""","
+52 SET XDRTO=XDRDIC_IENTO_","""_NODE_""","
+53 IF NODE="DIS"
IF XFILNO=2
DO DODIS^XDRMERGA
QUIT
+54 SET IENTOSTR=IENTO_","_XDRIENS
+55 DO DOSUBS^XDRMERGA(XDRFROM,XDRTO,IENTOSTR,IENTO)
End DoDot:1
IF NODE=""
QUIT
+56 SET XDRXX=$PIECE(@(XDRDIC_IENFROM_",0)"),U)
+57 ; KILL OFF MERGED FROM ENTRY
KILL DA
NEW DIU
SET DIU(0)=1
SET DIK=XDRDIC
SET DA=IENFROM
SET DFN=DA
DO ^DIK
+58 SET @(XDRDIC_IENFROM_",0)")=XDRXX
+59 QUIT
+60 ;
SAVEMERG(FILE,IENFROM,IENTO) ;
+1 NEW IENS,XDRFILE,YYY,ZZZ,XDRFDA,FROMARG,TOARG,XDRDA,Q,Q1,IENVAL,XDRSUB
+2 SET FROMARG=$ORDER(@FROM@(IENFROM,IENTO,""))
IF FROMARG=""
QUIT
+3 SET TOARG=$ORDER(@FROM@(IENFROM,IENTO,FROMARG,""))
+4 SET XDRDA=$$FIND1^DIC(15.4,"","Q",FROMARG)
+5 IF XDRDA>0
IF $PIECE(^XDRM(XDRDA,0),U)'=FROMARG
SET XDRDA=0
+6 IF XDRDA'>0
Begin DoDot:1
+7 NEW XDRFDA
+8 SET XDRFDA(15.4,"+1,",.01)=FROMARG
+9 SET XDRFDA(15.4,"+1,",.02)=TOARG
+10 SET XDRFDA(15.4,"+1,",.03)=DT
+11 DO UPDATE^DIE("","XDRFDA","YYY")
SET IENS=YYY(1)
+12 SET XDRDA=YYY(1)
End DoDot:1
+13 SET XDRFILE=$PIECE(^DIC(FILE,0),U)
+14 SET IENS=$$FIND1^DIC(15.41,","_XDRDA_",","Q",XDRFILE)
+15 IF IENS'>0
Begin DoDot:1
+16 SET IENS="+1,"_XDRDA_","
+17 SET XDRFDA(15.41,IENS,.01)=XDRFILE
+18 IF IENFROM>0
SET XDRFDA(15.41,IENS,.02)=IENFROM
+19 KILL YYY
+20 DO UPDATE^DIE("","XDRFDA","YYY","ZZZ")
SET IENS=YYY(1)
End DoDot:1
+21 IF IENFROM>0
Begin DoDot:1
+22 SET XDRSUB=15.411
SET IENVAL=IENFROM
+23 DO STORMERG
End DoDot:1
+24 KILL XDRFDA
+25 SET IENS=$$FIND1^DIC(15.42,","_XDRDA_",","Q",XDRFILE)
+26 IF IENS'>0
Begin DoDot:1
+27 SET IENS="+1,"_XDRDA_","
+28 SET XDRFDA(15.42,IENS,.01)=XDRFILE
+29 IF IENTO>0
SET XDRFDA(15.42,IENS,.02)=IENTO
+30 KILL YYY,ZZZ
+31 DO UPDATE^DIE("","XDRFDA","YYY","ZZZ")
SET IENS=YYY(1)
End DoDot:1
+32 IF IENTO>0
Begin DoDot:1
+33 SET XDRSUB=15.421
SET IENVAL=IENTO
+34 DO STORMERG
End DoDot:1
+35 QUIT
STORMERG ;
+1 ; REMOVE ANY PREVIOUS TRIES
KILL ^VA(15.4,XDRDA,$SELECT(XDRSUB=15.411:1,1:2),IENS,1)
+2 SET IENS="+1,"_IENS_","_XDRDA_","
+3 SET Q=^DIC(FILE,0,"GL")_IENVAL_")"
SET Q1=$EXTRACT(Q,1,$LENGTH(Q)-1)
+4 FOR
SET Q=$QUERY(@Q)
IF Q'[Q1
QUIT
Begin DoDot:1
+5 KILL XDRFDA
+6 SET XDRFDA(XDRSUB,IENS,.01)=$EXTRACT(Q,2,$LENGTH(Q))
+7 IF @Q'=""
SET XDRFDA(XDRSUB,IENS,1.01)=@Q
+8 DO UPDATE^DIE("","XDRFDA")
End DoDot:1
+9 QUIT
+10 ;
SAVEPNTR(IENFROM,IENTO,FILE,IENS,FIELD,VALUE) ;
+1 NEW XDRFDA,XDRDA,FROMARG
+2 SET FROMARG=$ORDER(@FROM@(IENFROM,IENTO,""))
IF FROMARG=""
QUIT
+3 SET XDRDA=$$FIND1^DIC(15.4,"","Q",FROMARG)
+4 SET X=FILE_";"_IENS_";"_FIELD
+5 SET XDRFDA(15.43,"+1,"_XDRDA_",",.01)=X
+6 SET XDRFDA(15.43,"+1,"_XDRDA_",",1.01)=VALUE
+7 DO UPDATE^DIE("","XDRFDA")
+8 QUIT
SNDMSG(XDRFDA) ;Sends msg when merge process has completed.
+1 NEW XDRGRP,XMTEXT,XMSUB,XMDUZ,XDRNAME
+2 SET XDRNAME=$$GET1^DIQ(15.2,XDRFDA,.01)
+3 SET R(1,0)=XDRNAME_" merge process has completed."
+4 SET XDRGRP=$$GET1^DIQ(15.1,"2,",.29,"I")
+5 IF XDRGRP>0
SET XDRGRPN=$$GET1^DIQ(3.8,XDRGRP,.01)
+6 SET XDRGRP=$SELECT(XDRGRP>0:"G."_XDRGRPN,1:"")
+7 IF XDRGRP'=""
SET XMY(XDRGRP)=""
+8 ;If no mail grp found, send msg to postmaster
IF XDRGRP=""
SET XMY(.5)=""
+9 SET XMTEXT="R("
SET XMSUB=XDRNAME_" Completed"
SET XMDUZ=.5
SET XMCHAN=1
+10 DO ^XMD
+11 QUIT
+12 ;
QUE ; (Moved from XDRMERG0)
+1 ;
+2 NEW XDRXX,XDRYY,XDRMA,DIE,DIC,DIR,DR,ZTDTH,ZTSK
+3 NEW XDRX,XDRY,XDRFIL,XDRGLOB,X,Y,XDRNAME
+4 NEW XDRFDA,XDRIENS,XDRI,XDRJ,XDRK,DA,DIK
+5 ;
+6 SET XDRFIL=$$FILE^XDRDPICK()
IF XDRFIL'>0
QUIT
+7 IF XDRFIL=2
Begin DoDot:1
+8 NEW X,XDRKEY
+9 SET (X,XDRKEY)=0
FOR
SET X=$ORDER(^VA(200,DUZ,51,"B",X))
IF X'>0!(XDRKEY)
QUIT
Begin DoDot:2
+10 IF $$GET1^DIQ(19.1,X,.01)="DG ELIGIBILITY"
SET XDRKEY=1
+11 QUIT
End DoDot:2
+12 SET Y=0
IF 'XDRKEY
WRITE !!,"You should hold the 'DG ELIGIBILITY' key to run a patient file merge."
SET Y=1
+13 QUIT
End DoDot:1
IF Y
QUIT
+14 SET XDRDIC=^DIC(XDRFIL,0,"GL")
+15 SET XDRGLOB=$EXTRACT(XDRDIC,2,999)
+16 SET X=""
+17 SET XNCNT=0
SET XNCNT0=0
+18 FOR
SET X=$ORDER(^VA(15,"AVDUP",XDRGLOB,X))
IF X=""
QUIT
SET Y=$ORDER(^(X,0))
Begin DoDot:1
+19 NEW YVAL
SET YVAL=^VA(15,Y,0)
+20 ; ALREADY DONE OR SCHEDULED
IF $PIECE(YVAL,U,20)>0
QUIT
+21 ; TAKE ONLY VERIFIED
IF $PIECE(YVAL,U,3)'="V"
QUIT
+22 ; TAKE ONLY IF MARKED READY TO MERGE
IF $PIECE(YVAL,U,5)'=1
QUIT
+23 IF $PIECE(YVAL,U,13)>0
Begin DoDot:2
+24 IF '$DATA(@(XDRDIC_(+YVAL)_",0)"))!'$DATA(@(XDRDIC_(+$PIECE(YVAL,U,2))_",0)"))
QUIT
+25 ; get ien numbers from duplicate file
IF $PIECE(YVAL,U,4)'=2
SET XDRX(+YVAL,+$PIECE(YVAL,U,2))=Y
+26 ; Reverse - merge to switched
IF '$TEST
SET XDRX(+$PIECE(YVAL,U,2),+YVAL)=Y
+27 SET XNCNT=XNCNT+1
End DoDot:2
End DoDot:1
+28 WRITE !!,XNCNT," Entries Ready to be included in merge"
+29 IF $ORDER(XDRX(0))'>0
Begin DoDot:1
+30 WRITE !!?15,$CHAR(7),"No Verified Duplicates included in merge",$CHAR(7),!!
End DoDot:1
QUIT
+31 ;
+32 KILL DIR
SET DIR(0)="Y"
+33 SET DIR("A",1)="This process will take a **LONG** time (usually over 15 hours, and sometimes"
+34 SET DIR("A",2)="considerably longer), but you CAN stop and restart the process when you"
+35 SET DIR("A")="want using the options. OK"
+36 DO ^DIR
KILL DIR
IF Y'>0
QUIT
NAME WRITE !!
SET DIR(0)="F^2:30"
+1 SET DIR("A")="Name for Merge Process"
+2 SET DIR("?",1)="Enter a unique name by which the MERGE PROCESS will be identified"
+3 SET DIR("?")="This name should be 2 to 30 characters in length"
+4 DO ^DIR
+5 KILL DIR
IF Y=U
QUIT
SET XDRNAME=Y
+6 IF $$FIND1^DIC(15.2,",","Q",XDRNAME)>0
Begin DoDot:1
+7 WRITE !!,$CHAR(7),"The name entered has already been used. The name must be unique.",!!
End DoDot:1
GOTO NAME
+8 ;
+9 ; CREATE PROCESS ENTRY
+10 ;
+11 SET XDRXX(15.2,"+1,",.01)=XDRNAME
+12 SET XDRXX(15.2,"+1,",.02)=XDRFIL
+13 DO UPDATE^DIE("","XDRXX","XDRYY","XDRMA")
+14 SET XDRFDA=$GET(XDRYY(1))
+15 ;
+16 ; NOW MOVE LIST OF DUPLICATES TO BE PROCESSED INTO THIS ENTRY
+17 SET XDRIENS="+1,"_XDRFDA_","
+18 FOR XDRI=0:0
SET XDRI=$ORDER(XDRX(XDRI))
IF XDRI'>0
QUIT
Begin DoDot:1
+19 SET XDRJ=$ORDER(XDRX(XDRI,0))
+20 SET XDRK=XDRX(XDRI,XDRJ)
+21 KILL XDRXX,XDRYY
+22 ; IEN1
SET XDRXX(15.22,XDRIENS,.01)=XDRI
+23 ; IEN2
SET XDRXX(15.22,XDRIENS,.02)=XDRJ
+24 ; ENTRY # IN FILE 15
SET XDRXX(15.22,XDRIENS,.03)=XDRK
+25 DO UPDATE^DIE("","XDRXX","XDRYY","XDRMA")
+26 KILL XDRXX,XDRYY,XDRMA
+27 ; AND MARK THEM AS IN THIS MERGE PROCESS IN FILE 15
+28 SET XDRXX(15,XDRK_",",.05)=3
+29 SET XDRXX(15,XDRK_",",.2)=XDRFDA
+30 DO FILE^DIE("","XDRXX")
+31 ; JLI 3/12/98 - FOR SOME REASON THE .05 FIELD STILL DOESN'T SEEM TO BE GETTING SET TO 3, SO CHECK IT AND IF THAT IS THE CASE, HARDSET IT.
+32 IF $PIECE(^VA(15,XDRK,0),U,5)'=3
SET $PIECE(^(0),U,5)=3
End DoDot:1
+33 ;
+34 ; GET DESIRED START TIME AND MARK PROCESS AS SCHEDULED
KILL DR
SET DR=".03;.04///S;"
+35 SET DIE="^VA(15.2,"
+36 SET DA=XDRFDA
+37 DO ^DIE
+38 ; TAKE DESIRED TIME
SET ZTDTH=$PIECE(^VA(15.2,XDRFDA,0),U,3)
+39 ; AND SET UP TASK
IF ZTDTH>0
Begin DoDot:1
+40 SET ZTRTN="DQ^XDRMERG0"
SET ZTDESC="MERGE PROCESS "_XDRNAME
+41 SET ZTIO="NULL"
SET ZTSAVE("XDRFDA")=""
+42 DO ^%ZTLOAD
+43 IF $GET(ZTSK)>0
Begin DoDot:2
+44 KILL DR
SET DR=".08///"_ZTSK_";"
SET DIE="^VA(15.2,"
SET DA=XDRFDA
DO ^DIE
+45 WRITE !!,"Merge process '",$PIECE(^VA(15.2,XDRFDA,0),U),"' for Verified Duplicates in File ",XDRFIL," scheduled",!,"as task ",ZTSK,".",!
End DoDot:2
End DoDot:1
IF $GET(ZTSK)>0
QUIT
+46 ;
+47 ; TASK INFO, TIME, ETC. NOT COMPLETE - SO REVERSE IT
+48 ;
+49 FOR XDRI=0:0
SET XDRI=$ORDER(XDRX(XDRI))
IF XDRI'>0
QUIT
Begin DoDot:1
+50 SET XDRJ=$ORDER(XDRX(XDRI,0))
+51 SET XDRK=XDRX(XDRI,XDRJ)
+52 KILL XDRXX,XDRYY
+53 ; UNMARK ENTRY IN FILE 15
SET XDRXX(15,XDRK_",",.2)="@"
+54 SET XDRXX(15,XDRK_",",.05)=1
+55 DO UPDATE^DIE("","XDRXX")
End DoDot:1
+56 SET DA=XDRFDA
+57 SET DIK="^VA(15.2,"
+58 DO ^DIK
+59 WRITE !!,$CHAR(7),"The Merge Process has been aborted, no changes made."
+60 QUIT
+61 ;