1 | RGDRM01 ;BAY/ALS-MPI/PD AWARE DUPLICATE RECORD MERGE ;02/22/00
|
---|
2 | ;;1.0;CLINICAL INFO RESOURCE NETWORK;**6,10,12,29,36**;30 Apr 99
|
---|
3 | ;
|
---|
4 | ;Reference to ^DPT( supported by IA #2070
|
---|
5 | ;Reference to ^DPT("AICN" supported by IA #2070
|
---|
6 | ;Reference to $$A40^MPIFA40 supported by IA #4294
|
---|
7 | ;
|
---|
8 | CKICNS(DFNFRM,DFNTO) ;Check ICN's and CMORs of FROM and TO records of
|
---|
9 | ; duplicate record pair
|
---|
10 | N CMORFRM,CMORTO,RETURN,ICNFRM,ICNTO,LOCFRM,LOCTO
|
---|
11 | S RETURN="1^OK to merge"
|
---|
12 | I ($G(DFNFRM)'>0)!($G(DFNTO)'>0) S RETURN="0^DFN NOT PASSED" G EXIT
|
---|
13 | S CMORFRM=$$GETVCCI^MPIF001(DFNFRM)
|
---|
14 | S CMORTO=$$GETVCCI^MPIF001(DFNTO)
|
---|
15 | S ICNFRM=$$GETICN^MPIF001(DFNFRM)
|
---|
16 | ; If FROM record has no ICN quit
|
---|
17 | I ICNFRM<0 G EXIT
|
---|
18 | S ICNTO=$$GETICN^MPIF001(DFNTO)
|
---|
19 | S LOCFRM=$$IFLOCAL^MPIF001(DFNFRM)
|
---|
20 | S LOCTO=$$IFLOCAL^MPIF001(DFNTO)
|
---|
21 | ; If both records have local ICNs, delete FROM data, keep TO data
|
---|
22 | I (LOCFRM=1)&(LOCTO=1) S ICN=$P(ICNFRM,"V",1) D DEL D DEL^RGDRM03 G EXIT
|
---|
23 | S HOME=$$SITE^VASITE()
|
---|
24 | ; If both records have National ICNs, log an exception
|
---|
25 | ;I ($E(ICNFRM,1,3)'=$E($P(HOME,"^",3),1,3)&(ICNFRM>0))&($E(ICNTO,1,3)'=$E($P(HOME,"^",3),1,3)&(ICNTO>0)) D G EXIT
|
---|
26 | ;. S RETURN="0^CANNOT MERGE RECORDS "_DFNFRM_" AND "_DFNTO_", both records have national ICNs assigned and must be resolved before merging."
|
---|
27 | ; If both records have a national ICN, delete the FROM data and call A40^MPIFA40 to trigger messaging to MPI and TFs
|
---|
28 | I ($E(ICNFRM,1,3)'=$E($P(HOME,"^",3),1,3)&(ICNFRM>0))&($E(ICNTO,1,3)'=$E($P(HOME,"^",3),1,3)&(ICNTO>0)) D
|
---|
29 | . S ERR=$$A40^MPIFA40(DFNTO,DFNFRM)
|
---|
30 | . I $P(ERR,"^",1)=-1 S RETURN="0^CANNOT MERGE RECORDS "_DFNFRM_" AND "_DFNTO_", "_$P(ERR,"^",2)
|
---|
31 | . I $P(RETURN,"^",1)>0 S ICN=$P(ICNFRM,"V",1) D DEL D DEL^RGDRM03
|
---|
32 | ; If FROM record is local and TO record is null, merge
|
---|
33 | I (LOCFRM=1)&(ICNTO<0) D MRGICN D MRGCMOR^RGDRM03
|
---|
34 | ; If FROM record is National and TO record is local, merge
|
---|
35 | E I ($E(ICNFRM,1,3)'=$E($P(HOME,"^",3),1,3)&(ICNFRM>0))&(LOCTO=1) D MRGICN D MRGCMOR^RGDRM03
|
---|
36 | ; If FROM record is National and TO record is null, merge
|
---|
37 | E I ($E(ICNFRM,1,3)'=$E($P(HOME,"^",3),1,3)&(ICNFRM>0))&(ICNTO<1) D MRGICN D MRGCMOR^RGDRM03
|
---|
38 | ; If FROM record is local and TO record is National, delete FROM data, keep TO data
|
---|
39 | E I (LOCFRM=1)&(LOCTO=0)&(ICNTO>0) S ICN=$P(ICNFRM,"V",1) D DEL D DEL^RGDRM03 G EXIT
|
---|
40 | ;
|
---|
41 | EXIT ;
|
---|
42 | Q RETURN
|
---|
43 | MRGICN ;Set ICN and ICN Checksum in TO record to values in FROM record
|
---|
44 | N ICN,CKSUM,DIQUIET,RGRSICN
|
---|
45 | S DIQUIET=1,RGRSICN=1
|
---|
46 | S ICN=$P(ICNFRM,"V",1),CKSUM=$P(ICNFRM,"V",2)
|
---|
47 | L +^DPT(DFNTO):10
|
---|
48 | S DIE="^DPT(",DA=DFNTO,DR="991.01///^S X=ICN;991.02///^S X=CKSUM"
|
---|
49 | D ^DIE K DIE,DA,DR
|
---|
50 | L -^DPT(DFNTO)
|
---|
51 | S ICNTO="" S ICNTO=$$GETICN^MPIF001(DFNTO)
|
---|
52 | ;Make sure local icn flag is not set if national just got assigned
|
---|
53 | I ($E(ICNTO,1,3)'=$E($P(HOME,"^",3),1,3)&(ICNTO>0)) D
|
---|
54 | . L +^DPT(DFNTO):10
|
---|
55 | . S DIE="^DPT(",DA=DFNTO,DR="991.04///@"
|
---|
56 | . D ^DIE K DIE,DA,DR
|
---|
57 | . L -^DPT(DFNTO)
|
---|
58 | ; set local icn flag to Y if local just got assigned
|
---|
59 | I $E(ICNTO,1,3)=$E($P(HOME,"^",3),1,3) D
|
---|
60 | . L +^DPT(DFNTO):10
|
---|
61 | . S DIE="^DPT(",DA=DFNTO,DR="991.04///^S X=1"
|
---|
62 | . D ^DIE K DIE,DA,DR
|
---|
63 | . L -^DPT(DFNTO)
|
---|
64 | DEL ;Delete ICN, ICN Checksum and Locally Assigned ICN fields in FROM record
|
---|
65 | N DIQUIET,RGRSICN
|
---|
66 | S DIQUIET=1,RGRSICN=1
|
---|
67 | L +^DPT(DFNFRM):10
|
---|
68 | S DIE="^DPT(",DA=DFNFRM,DR="991.01///@;991.02///@;991.04///@"
|
---|
69 | D ^DIE K DIE,DA,DR
|
---|
70 | K ^DPT("AICN",ICN,DFNFRM)
|
---|
71 | L -^DPT(DFNFRM)
|
---|
72 | DELEXC ;Delete exceptions on file for patient record being removed.
|
---|
73 | S EXCT=""
|
---|
74 | F S EXCT=$O(^RGHL7(991.1,"ADFN",EXCT)) Q:EXCT="" D
|
---|
75 | . I $D(^RGHL7(991.1,"ADFN",EXCT,DFNFRM)) D
|
---|
76 | .. S IEN=0
|
---|
77 | .. F S IEN=$O(^RGHL7(991.1,"ADFN",EXCT,DFNFRM,IEN)) Q:'IEN D
|
---|
78 | ... S IEN2=0
|
---|
79 | ... F S IEN2=$O(^RGHL7(991.1,"ADFN",EXCT,DFNFRM,IEN,IEN2)) Q:'IEN2 D
|
---|
80 | .... S NUM="" S NUM=$P(^RGHL7(991.1,IEN,1,0),"^",4)
|
---|
81 | .... I NUM=1 D
|
---|
82 | ..... L +^RGHL7(991.1,IEN):10
|
---|
83 | ..... S DIK="^RGHL7(991.1,",DA=IEN
|
---|
84 | ..... D ^DIK K DIK,DA
|
---|
85 | ..... L -^RGHL7(991.1,IEN)
|
---|
86 | .... E I NUM>1 D DELE
|
---|
87 | K EXCT,IEN,IEN2,NUM
|
---|
88 | QUIT Q
|
---|
89 | DELE ;Delete exception
|
---|
90 | L +^RGHL7(991.1,IEN):10
|
---|
91 | S DA(1)=IEN,DA=IEN2
|
---|
92 | S DIK="^RGHL7(991.1,"_DA(1)_",1,"
|
---|
93 | D ^DIK K DIK,DA
|
---|
94 | L -^RGHL7(991.1,IEN)
|
---|
95 | Q
|
---|