changed what score is set for mdmlinks that created new golden resource (#4514)
* changed what score is set for mdmlinks that created new golden resource * fix test --------- Co-authored-by: Long Ma <long@smilecdr.com>
This commit is contained in:
parent
697bd27799
commit
f32157319c
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
type: fix
|
||||
issue: 4090
|
||||
title: "Previously, mdm links that connected resources and golden resources that were newly created had a link score of null,
|
||||
this changes it to 1.0 as the golden resource should be a perfect match with the source resource it was created from."
|
|
@ -569,6 +569,10 @@ abstract public class BaseMdmR4Test extends BaseJpaR4Test {
|
|||
assertFields(MdmLink::getEidMatch, theExpectedValues);
|
||||
}
|
||||
|
||||
protected void assertLinksMatchScore(Double... theExpectedValues) {
|
||||
assertFields(MdmLink::getScore, theExpectedValues);
|
||||
}
|
||||
|
||||
public SearchParameterMap buildGoldenResourceSearchParameterMap() {
|
||||
SearchParameterMap spMap = new SearchParameterMap();
|
||||
spMap.setLoadSynchronous(true);
|
||||
|
|
|
@ -77,9 +77,12 @@ public class MdmProviderQueryLinkR4Test extends BaseLinkR4Test {
|
|||
JpaPid sourcePatient2Pid = runInTransaction(()->myIdHelperService.getPidOrNull(RequestPartitionId.allPartitions(), sourcePatient2));
|
||||
|
||||
MdmLink possibleDuplicateMdmLink = (MdmLink) myMdmLinkDaoSvc.newMdmLink();
|
||||
possibleDuplicateMdmLink.setGoldenResourcePersistenceId(sourcePatient1Pid);
|
||||
possibleDuplicateMdmLink.setSourcePersistenceId(sourcePatient2Pid);
|
||||
possibleDuplicateMdmLink.setMatchResult(MdmMatchResultEnum.POSSIBLE_DUPLICATE).setLinkSource(MdmLinkSourceEnum.AUTO);
|
||||
possibleDuplicateMdmLink.setGoldenResourcePersistenceId(sourcePatient1Pid)
|
||||
.setSourcePersistenceId(sourcePatient2Pid)
|
||||
.setMatchResult(MdmMatchResultEnum.POSSIBLE_DUPLICATE)
|
||||
.setLinkSource(MdmLinkSourceEnum.AUTO)
|
||||
.setScore(1.0)
|
||||
.setRuleCount(1L);
|
||||
saveLink(possibleDuplicateMdmLink);
|
||||
}
|
||||
|
||||
|
@ -90,7 +93,7 @@ public class MdmProviderQueryLinkR4Test extends BaseLinkR4Test {
|
|||
List<Parameters.ParametersParameterComponent> list = getParametersByName(result, "link");
|
||||
assertThat(list, hasSize(1));
|
||||
List<Parameters.ParametersParameterComponent> part = list.get(0).getPart();
|
||||
assertMdmLink(MDM_LINK_PROPERTY_COUNT, part, mySourcePatientId.getValue(), myPatientId.getValue(), MdmMatchResultEnum.POSSIBLE_MATCH, "false", "true", null);
|
||||
assertMdmLink(MDM_LINK_PROPERTY_COUNT, part, mySourcePatientId.getValue(), myPatientId.getValue(), MdmMatchResultEnum.POSSIBLE_MATCH, "false", "true", "1");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -100,7 +103,7 @@ public class MdmProviderQueryLinkR4Test extends BaseLinkR4Test {
|
|||
List<Parameters.ParametersParameterComponent> list = getParametersByName(result, "link");
|
||||
assertThat("All resources with Patient type found", list, hasSize(3));
|
||||
List<Parameters.ParametersParameterComponent> part = list.get(0).getPart();
|
||||
assertMdmLink(MDM_LINK_PROPERTY_COUNT, part, mySourcePatientId.getValue(), myPatientId.getValue(), MdmMatchResultEnum.POSSIBLE_MATCH, "false", "true", null);
|
||||
assertMdmLink(MDM_LINK_PROPERTY_COUNT, part, mySourcePatientId.getValue(), myPatientId.getValue(), MdmMatchResultEnum.POSSIBLE_MATCH, "false", "true", "1");
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -68,6 +68,7 @@ public class MdmMatchLinkSvcTest extends BaseMdmR4Test {
|
|||
assertLinksMatchResult(MATCH);
|
||||
assertLinksCreatedNewResource(true);
|
||||
assertLinksMatchedByEid(false);
|
||||
assertLinksMatchScore(1.0);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -79,6 +80,7 @@ public class MdmMatchLinkSvcTest extends BaseMdmR4Test {
|
|||
assertLinksMatchResult(MATCH);
|
||||
assertLinksCreatedNewResource(true);
|
||||
assertLinksMatchedByEid(false);
|
||||
assertLinksMatchScore(1.0);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -93,6 +95,7 @@ public class MdmMatchLinkSvcTest extends BaseMdmR4Test {
|
|||
assertLinksMatchResult(MATCH, MATCH);
|
||||
assertLinksCreatedNewResource(true, true);
|
||||
assertLinksMatchedByEid(false, false);
|
||||
assertLinksMatchScore(1.0, 1.0);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -107,6 +110,7 @@ public class MdmMatchLinkSvcTest extends BaseMdmR4Test {
|
|||
assertLinksMatchResult(MATCH, MATCH);
|
||||
assertLinksCreatedNewResource(true, false);
|
||||
assertLinksMatchedByEid(false, false);
|
||||
assertLinksMatchScore(1.0, 2.0/3.0);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -29,7 +29,7 @@ public final class MdmMatchOutcome {
|
|||
|
||||
public static final MdmMatchOutcome POSSIBLE_DUPLICATE = new MdmMatchOutcome(null, null).setMatchResultEnum(MdmMatchResultEnum.POSSIBLE_DUPLICATE);
|
||||
public static final MdmMatchOutcome NO_MATCH = new MdmMatchOutcome(null, null).setMatchResultEnum(MdmMatchResultEnum.NO_MATCH);
|
||||
public static final MdmMatchOutcome NEW_GOLDEN_RESOURCE_MATCH = new MdmMatchOutcome(null, null).setMatchResultEnum(MdmMatchResultEnum.MATCH).setCreatedNewResource(true);
|
||||
public static final MdmMatchOutcome NEW_GOLDEN_RESOURCE_MATCH = new MdmMatchOutcome(null, 1.0).setMatchResultEnum(MdmMatchResultEnum.MATCH).setCreatedNewResource(true);
|
||||
public static final MdmMatchOutcome EID_MATCH = new MdmMatchOutcome(null, null).setMatchResultEnum(MdmMatchResultEnum.MATCH).setEidMatch(true);
|
||||
public static final MdmMatchOutcome POSSIBLE_MATCH = new MdmMatchOutcome(null, null).setMatchResultEnum(MdmMatchResultEnum.POSSIBLE_MATCH);
|
||||
|
||||
|
@ -145,7 +145,10 @@ public final class MdmMatchOutcome {
|
|||
* Returns the normalized score
|
||||
*/
|
||||
public Double getNormalizedScore() {
|
||||
if (myMdmRuleCount == 0) {
|
||||
if (myCreatedNewResource) {
|
||||
// If we created a new golden resource from this match, the match score must be 1.00
|
||||
return 1.0;
|
||||
} else if (myMdmRuleCount == 0) {
|
||||
return 0.0;
|
||||
}
|
||||
return score / myMdmRuleCount;
|
||||
|
|
|
@ -1,5 +1,25 @@
|
|||
package ca.uhn.fhir.batch2.jobs.export;
|
||||
|
||||
/*-
|
||||
* #%L
|
||||
* hapi-fhir-storage-batch2-jobs
|
||||
* %%
|
||||
* Copyright (C) 2014 - 2023 Smile CDR, Inc.
|
||||
* %%
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
import ca.uhn.fhir.batch2.model.StatusEnum;
|
||||
import ca.uhn.fhir.jpa.api.svc.IBatch2JobRunner;
|
||||
import ca.uhn.fhir.jpa.bulk.export.model.BulkExportJobStatusEnum;
|
||||
|
|
Loading…
Reference in New Issue