| 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 | 
|---|