Skip to content

Commit 9d73733

Browse files
Merge pull request #13169 from SORMAS-Foundation/change-#13168-automatic-message-processing-person-matching
#13168 Normalization of Automatic Processing for Name, Birthdate, and…
2 parents 6dda78d + 8bb7730 commit 9d73733

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

sormas-backend/src/main/java/de/symeda/sormas/backend/externalmessage/labmessage/AutomaticLabMessageProcessor.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
package de.symeda.sormas.backend.externalmessage.labmessage;
1717

18+
import java.text.Collator;
1819
import java.util.List;
1920
import java.util.Set;
2021
import java.util.concurrent.CompletableFuture;
@@ -316,5 +317,20 @@ private <T> boolean unsetOrMatches(T personValue, T messageValue) {
316317

317318
return personValue.equals(messageValue);
318319
}
320+
321+
private boolean unsetOrMatches(String personValue, String messageValue) {
322+
if (personValue == null || messageValue == null) {
323+
return true;
324+
}
325+
326+
Collator collator = Collator.getInstance();
327+
collator.setStrength(Collator.PRIMARY);
328+
329+
return collator.compare(normalizatString(personValue), normalizatString(messageValue)) == 0;
330+
}
331+
332+
private String normalizatString(String string) {
333+
return string.replaceAll("[\\s-,;:]", "");
334+
}
319335
}
320336
}

sormas-backend/src/test/java/de/symeda/sormas/backend/externalmessage/labmessage/AutomaticLabMessageProcessorTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import de.symeda.sormas.api.externalmessage.processing.ExternalMessageProcessingResult;
4141
import de.symeda.sormas.api.infrastructure.facility.FacilityDto;
4242
import de.symeda.sormas.api.infrastructure.facility.FacilityType;
43+
import de.symeda.sormas.api.person.PersonCriteria;
4344
import de.symeda.sormas.api.person.PersonDto;
4445
import de.symeda.sormas.api.person.Sex;
4546
import de.symeda.sormas.api.sample.PathogenTestDto;
@@ -310,6 +311,29 @@ public void testProcessWithExistingPersonWithSameNationalHealthIdButDifferentDet
310311
assertThat(getPathogenTestFacade().getAllActiveUuids(), hasSize(0));
311312
}
312313

314+
@Test
315+
public void testProcessWithExistingPersonWithSameNationalHealthIdAndPersonDetailsNormalizedCheck()
316+
throws ExecutionException, InterruptedException {
317+
ExternalMessageDto externalMessage = createExternalMessage(m -> {
318+
m.setPersonFirstName("john vander");
319+
m.setPersonLastName("DOÉ");
320+
m.setPersonCity(" PERSON city \n");
321+
m.setPersonStreet(" person STREET 12A");
322+
});
323+
324+
creator.createPerson("John Van Der", "Doe", Sex.MALE, p -> {
325+
p.setNationalHealthId(externalMessage.getPersonNationalHealthId());
326+
p.getAddress().setCity("person city");
327+
p.getAddress().setStreet("PERSON STREET, 12a");
328+
});
329+
330+
ProcessingResult<ExternalMessageProcessingResult> result = runFlow(externalMessage);
331+
assertThat(result.getStatus(), is(DONE));
332+
assertThat(externalMessage.getStatus(), is(ExternalMessageStatus.PROCESSED));
333+
assertThat(getExternalMessageFacade().getByUuid(externalMessage.getUuid()).getStatus(), is(ExternalMessageStatus.PROCESSED));
334+
assertThat(getPersonFacade().count(new PersonCriteria()), is(1L));
335+
}
336+
313337
@Test
314338
public void testProcessWithExistingSimilarPerson() throws ExecutionException, InterruptedException {
315339
ExternalMessageDto externalMessage = createExternalMessage(m -> m.setPersonNationalHealthId(null));

0 commit comments

Comments
 (0)