From ef2b0e8c2e6b202da9c939e5d3aa19210ae1c9e9 Mon Sep 17 00:00:00 2001 From: Steven Williams Date: Thu, 14 Mar 2024 11:12:17 -0400 Subject: [PATCH 1/2] Remove assumption of millisecond precision --- .../main/java/com/lantanagroup/link/api/MeasureEvaluator.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/api/src/main/java/com/lantanagroup/link/api/MeasureEvaluator.java b/api/src/main/java/com/lantanagroup/link/api/MeasureEvaluator.java index 9eba82c1e..63fbead71 100644 --- a/api/src/main/java/com/lantanagroup/link/api/MeasureEvaluator.java +++ b/api/src/main/java/com/lantanagroup/link/api/MeasureEvaluator.java @@ -46,8 +46,6 @@ private MeasureReport generateMeasureReport() { MeasureReport measureReport; String patientDataBundleId = ReportIdHelper.getPatientDataBundleId(reportContext.getMasterIdentifierValue(), patientId); String measureId = this.measureContext.getMeasure().getIdElement().getIdPart(); - String start = this.criteria.getPeriodStart().substring(0, this.criteria.getPeriodStart().indexOf(".")); - String end = this.criteria.getPeriodEnd().substring(0, this.criteria.getPeriodEnd().indexOf(".")); Bundle patientBundle; try (Stopwatch stopwatch = this.stopwatchManager.start(Constants.TASK_RETRIEVE_PATIENT_DATA, Constants.CATEGORY_REPORT)) { @@ -60,7 +58,7 @@ private MeasureReport generateMeasureReport() { Helper.dumpToFile(patientBundle, config.getDebugPath(), fileName); } - logger.info("Executing $evaluate-measure for measure: {}, start: {}, end: {}, patient: {}, resources: {}", measureId, start, end, patientId, patientBundle.getEntry().size()); + logger.info("Executing $evaluate-measure for measure: {}, start: {}, end: {}, patient: {}, resources: {}", measureId, criteria.getPeriodStart(), criteria.getPeriodEnd(), patientId, patientBundle.getEntry().size()); //noinspection unused try (Stopwatch stopwatch = this.stopwatchManager.start(Constants.TASK_MEASURE, Constants.CATEGORY_EVALUATE)) { From 349ae6a4fef3663951bb88cb02816644e7584b93 Mon Sep 17 00:00:00 2001 From: Steven Williams Date: Thu, 14 Mar 2024 11:13:15 -0400 Subject: [PATCH 2/2] Delegate date parsing to HAPI --- .../controller/GlobalReportController.java | 20 ++++++------------- .../link/api/controller/LogController.java | 8 ++------ .../java/com/lantanagroup/link/Helper.java | 17 +++------------- 3 files changed, 11 insertions(+), 34 deletions(-) diff --git a/api/src/main/java/com/lantanagroup/link/api/controller/GlobalReportController.java b/api/src/main/java/com/lantanagroup/link/api/controller/GlobalReportController.java index 4bc20ccbe..6feefc808 100644 --- a/api/src/main/java/com/lantanagroup/link/api/controller/GlobalReportController.java +++ b/api/src/main/java/com/lantanagroup/link/api/controller/GlobalReportController.java @@ -37,25 +37,17 @@ public List getReports( if (!startDate.isEmpty()) { Date date = Helper.parseFhirDate(startDate); - reports = reports.stream().filter(x -> { - try { - return Helper.parseFhirDate(x.getPeriodStart()).after(date) || Helper.parseFhirDate(x.getPeriodStart()).equals(date); - } catch (ParseException e) { - throw new RuntimeException(e); - } - }).collect(Collectors.toList()); + reports = reports.stream().filter(x -> + Helper.parseFhirDate(x.getPeriodStart()).after(date) || Helper.parseFhirDate(x.getPeriodStart()).equals(date) + ).collect(Collectors.toList()); } if (!endDate.isEmpty()) { Date date = Helper.parseFhirDate(endDate); - reports = reports.stream().filter(x -> { - try { - return Helper.parseFhirDate(x.getPeriodEnd()).before(date) || Helper.parseFhirDate(x.getPeriodStart()).equals(date); - } catch (ParseException e) { - throw new RuntimeException(e); - } - }).collect(Collectors.toList()); + reports = reports.stream().filter(x -> + Helper.parseFhirDate(x.getPeriodEnd()).before(date) || Helper.parseFhirDate(x.getPeriodStart()).equals(date) + ).collect(Collectors.toList()); } if (!tenantId.isEmpty()) { diff --git a/api/src/main/java/com/lantanagroup/link/api/controller/LogController.java b/api/src/main/java/com/lantanagroup/link/api/controller/LogController.java index 2671830d6..57d777f16 100644 --- a/api/src/main/java/com/lantanagroup/link/api/controller/LogController.java +++ b/api/src/main/java/com/lantanagroup/link/api/controller/LogController.java @@ -34,12 +34,8 @@ public LogSearchResponse getLogs(@RequestParam(required = false) String startDat Date startDateObj; Date endDateObj; - try { - startDateObj = Helper.parseFhirDate(startDate); - endDateObj = Helper.parseFhirDate(endDate); - } catch (ParseException ex) { - throw new IllegalArgumentException("Invalid date format, must be in the format yyyy-MM-dd'T'HH:mm:ss.SSSXXX or yyyy-MM-dd'T'HH:mm:ssXXX"); - } + startDateObj = Helper.parseFhirDate(startDate); + endDateObj = Helper.parseFhirDate(endDate); List logMessages = this.sharedService.findLogMessages(startDateObj, endDateObj, severity, page, content); LogSearchResponse res = new LogSearchResponse(); diff --git a/core/src/main/java/com/lantanagroup/link/Helper.java b/core/src/main/java/com/lantanagroup/link/Helper.java index de39e818d..b6e2f0ee4 100644 --- a/core/src/main/java/com/lantanagroup/link/Helper.java +++ b/core/src/main/java/com/lantanagroup/link/Helper.java @@ -13,6 +13,7 @@ import org.apache.commons.text.StringEscapeUtils; import org.hl7.fhir.r4.model.Bundle; import org.hl7.fhir.r4.model.CapabilityStatement; +import org.hl7.fhir.r4.model.DateTimeType; import org.hl7.fhir.r4.model.Resource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -66,20 +67,8 @@ public static String getFhirDate(Date date) { return new SimpleDateFormat(SIMPLE_DATE_MILLIS_FORMAT).format(date); } - public static Date parseFhirDate(String dateStr) throws ParseException { - if (StringUtils.isEmpty(dateStr)) { - return null; - } - - SimpleDateFormat formatterMillis = new SimpleDateFormat(SIMPLE_DATE_MILLIS_FORMAT); - SimpleDateFormat formatterSec = new SimpleDateFormat(SIMPLE_DATE_SECONDS_FORMAT); - Date dateReturned; - try { - dateReturned = formatterMillis.parse(dateStr); - } catch (Exception ex) { - dateReturned = formatterSec.parse(dateStr); - } - return dateReturned; + public static Date parseFhirDate(String dateStr) { + return new DateTimeType(dateStr).getValue(); } public static List concatenate(List list1, List list2) {