From a5f1900858b46c04c97ab3ea2ebf17eddedec0ff Mon Sep 17 00:00:00 2001 From: Jose Francisco Date: Tue, 23 Jul 2024 12:08:02 +0100 Subject: [PATCH 1/4] (fix) void old patient names --- .../api/translators/impl/PatientTranslatorImpl.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/api/src/main/java/org/openmrs/module/fhir2/api/translators/impl/PatientTranslatorImpl.java b/api/src/main/java/org/openmrs/module/fhir2/api/translators/impl/PatientTranslatorImpl.java index aeeb7f8137..2ab52bf81b 100644 --- a/api/src/main/java/org/openmrs/module/fhir2/api/translators/impl/PatientTranslatorImpl.java +++ b/api/src/main/java/org/openmrs/module/fhir2/api/translators/impl/PatientTranslatorImpl.java @@ -15,6 +15,7 @@ import javax.annotation.Nonnull; +import java.util.Date; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -147,6 +148,14 @@ public org.openmrs.Patient toOpenmrsType(@Nonnull org.openmrs.Patient currentPat } } + for (PersonName existingName : currentPatient.getNames()) { + if (!existingName.getVoided()) { + existingName.setVoided(true); + existingName.setVoidReason("Updated with new name"); + existingName.setDateVoided(new Date()); + } + } + for (HumanName name : patient.getName()) { currentPatient.addName(nameTranslator.toOpenmrsType(name)); } From ac091a0ff3ad06ab97e02e4b89ba0f5cfdba78f6 Mon Sep 17 00:00:00 2001 From: Jose Francisco Date: Thu, 25 Jul 2024 11:06:39 +0100 Subject: [PATCH 2/4] (chore) replace the existing name instead of creating a new name --- .../impl/PatientTranslatorImpl.java | 19 +++++++++---------- .../impl/PatientTranslatorImplTest.java | 2 +- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/api/src/main/java/org/openmrs/module/fhir2/api/translators/impl/PatientTranslatorImpl.java b/api/src/main/java/org/openmrs/module/fhir2/api/translators/impl/PatientTranslatorImpl.java index 2ab52bf81b..96a759298f 100644 --- a/api/src/main/java/org/openmrs/module/fhir2/api/translators/impl/PatientTranslatorImpl.java +++ b/api/src/main/java/org/openmrs/module/fhir2/api/translators/impl/PatientTranslatorImpl.java @@ -15,7 +15,6 @@ import javax.annotation.Nonnull; -import java.util.Date; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -148,16 +147,16 @@ public org.openmrs.Patient toOpenmrsType(@Nonnull org.openmrs.Patient currentPat } } - for (PersonName existingName : currentPatient.getNames()) { - if (!existingName.getVoided()) { - existingName.setVoided(true); - existingName.setVoidReason("Updated with new name"); - existingName.setDateVoided(new Date()); - } - } - for (HumanName name : patient.getName()) { - currentPatient.addName(nameTranslator.toOpenmrsType(name)); + PersonName existingName; + if (name.hasId()) { + existingName = currentPatient.getNames().stream().filter(n -> n.getUuid().equals(name.getId())).findFirst() + .orElse(null); + } else { + existingName = currentPatient.getPersonName(); + } + PersonName pn = nameTranslator.toOpenmrsType(existingName != null ? existingName : new PersonName(), name); + currentPatient.addName(pn); } if (patient.hasGender()) { diff --git a/api/src/test/java/org/openmrs/module/fhir2/api/translators/impl/PatientTranslatorImplTest.java b/api/src/test/java/org/openmrs/module/fhir2/api/translators/impl/PatientTranslatorImplTest.java index 73a885b5d3..78390a62d5 100644 --- a/api/src/test/java/org/openmrs/module/fhir2/api/translators/impl/PatientTranslatorImplTest.java +++ b/api/src/test/java/org/openmrs/module/fhir2/api/translators/impl/PatientTranslatorImplTest.java @@ -304,7 +304,7 @@ public void shouldTranslateFhirPatientNameToOpenmrsPatientName() { PersonName personName = new PersonName(); personName.setGivenName(PATIENT_GIVEN_NAME); personName.setFamilyName(PATIENT_FAMILY_NAME); - when(nameTranslator.toOpenmrsType(any())).thenReturn(personName); + when(nameTranslator.toOpenmrsType(any(), any())).thenReturn(personName); Patient patient = new Patient(); HumanName name = new HumanName(); From e36af45c70c4f4393d0379eb899ce2e3fad49390 Mon Sep 17 00:00:00 2001 From: Jose Francisco Date: Thu, 25 Jul 2024 12:01:20 +0100 Subject: [PATCH 3/4] (chore) replace the existing name instead of creating a new name --- .../impl/PatientTranslatorImplTest.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/api/src/test/java/org/openmrs/module/fhir2/api/translators/impl/PatientTranslatorImplTest.java b/api/src/test/java/org/openmrs/module/fhir2/api/translators/impl/PatientTranslatorImplTest.java index 78390a62d5..eae554874b 100644 --- a/api/src/test/java/org/openmrs/module/fhir2/api/translators/impl/PatientTranslatorImplTest.java +++ b/api/src/test/java/org/openmrs/module/fhir2/api/translators/impl/PatientTranslatorImplTest.java @@ -66,6 +66,8 @@ public class PatientTranslatorImplTest { private static final String PATIENT_IDENTIFIER_UUID = "654321-fedcba-654321"; + private static final String PATIENT_NAME_UUID = "1fdb5469-57c7-435f-b009-3dcceb23b0a2"; + private static final String PATIENT_GIVEN_NAME = "Jean Claude"; private static final String PATIENT_FAMILY_NAME = "van Damme"; @@ -317,6 +319,27 @@ public void shouldTranslateFhirPatientNameToOpenmrsPatientName() { assertThat(result.getFamilyName(), equalTo(PATIENT_FAMILY_NAME)); } + @Test + public void shouldTranslateFhirPatientNameToExistingOpenmrsPatientName() { + PersonName personName = new PersonName(); + personName.setUuid(PATIENT_NAME_UUID); + personName.setGivenName(PATIENT_GIVEN_NAME); + personName.setFamilyName(PATIENT_FAMILY_NAME); + when(nameTranslator.toOpenmrsType(any(), any())).thenReturn(personName); + + Patient patient = new Patient(); + HumanName name = new HumanName(); + name.setId(PATIENT_NAME_UUID); + name.addGiven(PATIENT_GIVEN_NAME); + name.setFamily(PATIENT_FAMILY_NAME); + patient.addName(name); + + org.openmrs.Patient result = patientTranslator.toOpenmrsType(patient); + assertThat(result.getGivenName(), equalTo(PATIENT_GIVEN_NAME)); + assertThat(result.getFamilyName(), equalTo(PATIENT_FAMILY_NAME)); + assertThat(result.getPersonName().getUuid(), equalTo(PATIENT_NAME_UUID)); + } + @Test public void shouldTranslateFhirPatientGenderToOpenmrsGender() { when(genderTranslator.toOpenmrsType(Enumerations.AdministrativeGender.FEMALE)).thenReturn("F"); From 50ba3aa2e0b7dcdae69157fde2eebe3a5b1f631d Mon Sep 17 00:00:00 2001 From: Jose Francisco Date: Tue, 22 Oct 2024 12:59:44 +0100 Subject: [PATCH 4/4] (feat) Update existing person name when the name exists --- .../fhir2/api/translators/impl/PatientTranslatorImpl.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/api/src/main/java/org/openmrs/module/fhir2/api/translators/impl/PatientTranslatorImpl.java b/api/src/main/java/org/openmrs/module/fhir2/api/translators/impl/PatientTranslatorImpl.java index 96a759298f..037077fd61 100644 --- a/api/src/main/java/org/openmrs/module/fhir2/api/translators/impl/PatientTranslatorImpl.java +++ b/api/src/main/java/org/openmrs/module/fhir2/api/translators/impl/PatientTranslatorImpl.java @@ -148,13 +148,12 @@ public org.openmrs.Patient toOpenmrsType(@Nonnull org.openmrs.Patient currentPat } for (HumanName name : patient.getName()) { - PersonName existingName; + PersonName existingName = null; if (name.hasId()) { existingName = currentPatient.getNames().stream().filter(n -> n.getUuid().equals(name.getId())).findFirst() .orElse(null); - } else { - existingName = currentPatient.getPersonName(); } + PersonName pn = nameTranslator.toOpenmrsType(existingName != null ? existingName : new PersonName(), name); currentPatient.addName(pn); }