diff --git a/docker/service/src/main/java/uk/nhs/adaptors/scr/mappings/from/hl7/XmlToFhirMapper.java b/docker/service/src/main/java/uk/nhs/adaptors/scr/mappings/from/hl7/XmlToFhirMapper.java index b7a75225..d238a1ff 100644 --- a/docker/service/src/main/java/uk/nhs/adaptors/scr/mappings/from/hl7/XmlToFhirMapper.java +++ b/docker/service/src/main/java/uk/nhs/adaptors/scr/mappings/from/hl7/XmlToFhirMapper.java @@ -1,6 +1,7 @@ package uk.nhs.adaptors.scr.mappings.from.hl7; import lombok.SneakyThrows; +import org.slf4j.LoggerFactory; import org.hl7.fhir.r4.model.BaseDateTimeType; import org.hl7.fhir.r4.model.DateTimeType; import org.hl7.fhir.r4.model.InstantType; @@ -106,6 +107,15 @@ static T parseDate(String date, Class clazz) { baseDateTimeType.setTimeZone(TimeZone.getTimeZone(TIMEZONE)); baseDateTimeType.setYear(parseInt(date) + 1); baseDateTimeType.setMillis(yearPrecision); + } else if (date.equals("1")) { + date = "19700101"; + LocalDate parsed = LocalDate.parse(date, DateTimeFormatter.ofPattern(DATE_PATTERN)); + baseDateTimeType.setPrecision(DAY); + baseDateTimeType.setTimeZone(TimeZone.getTimeZone(TIMEZONE)); + setDatePart(baseDateTimeType, parsed.getDayOfMonth(), parsed.getMonthValue(), parsed.getYear()); + baseDateTimeType.setMillis(dayPrecision); + org.slf4j.Logger logger = LoggerFactory.getLogger(XmlToFhirMapper.class); + logger.error("Invalid date value:1 updated"); } else { throw new ScrBaseException("Unsupported date format: " + date); } diff --git a/docker/service/src/test/java/uk/nhs/adaptors/scr/mappings/from/hl7/XmlToFhirMapperTest.java b/docker/service/src/test/java/uk/nhs/adaptors/scr/mappings/from/hl7/XmlToFhirMapperTest.java index cb1ffdae..091b971a 100644 --- a/docker/service/src/test/java/uk/nhs/adaptors/scr/mappings/from/hl7/XmlToFhirMapperTest.java +++ b/docker/service/src/test/java/uk/nhs/adaptors/scr/mappings/from/hl7/XmlToFhirMapperTest.java @@ -37,6 +37,10 @@ public void When_ParsingDate_Expect_CorrectDateFormat() { date = parseDate("2023", InstantType.class); assertThat(date.getValueAsString()).isEqualTo("2023"); + // FLAGSAPI-806 + date = parseDate("1", InstantType.class); + assertThat(date.getValueAsString()).isEqualTo("1970-01-01"); + assertThrows(ScrBaseException.class, () -> { parseDate("-2023", InstantType.class); });