From a59d8aad0021c64d910ecfd613e1e2df473ccd53 Mon Sep 17 00:00:00 2001 From: mozzy11 Date: Wed, 21 Aug 2024 22:15:15 +0300 Subject: [PATCH 1/4] upgrade fhir2 version --- api/pom.xml | 2 +- .../module/labonfhir/api/event/LabCreationListener.java | 2 +- omod/pom.xml | 2 +- pom.xml | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/pom.xml b/api/pom.xml index 49410d3..54a9d85 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -15,7 +15,7 @@ org.openmrs.module labonfhir - 1.4.0-SNAPSHOT + 1.5.0-SNAPSHOT labonfhir-api diff --git a/api/src/main/java/org/openmrs/module/labonfhir/api/event/LabCreationListener.java b/api/src/main/java/org/openmrs/module/labonfhir/api/event/LabCreationListener.java index 8f07841..fbcdc9f 100644 --- a/api/src/main/java/org/openmrs/module/labonfhir/api/event/LabCreationListener.java +++ b/api/src/main/java/org/openmrs/module/labonfhir/api/event/LabCreationListener.java @@ -88,7 +88,7 @@ public Bundle createLabBundle(Task task) { includes.add(new Include("Task:based-on")); includes.add(new Include("Task:location")); - IBundleProvider labBundle = fhirTaskService.searchForTasks(new TaskSearchParams(null, null, null, uuid, null, null, includes)); + IBundleProvider labBundle = fhirTaskService.searchForTasks(new TaskSearchParams(null, null , null ,null, null, uuid, null, null, includes)); Bundle transactionBundle = new Bundle(); transactionBundle.setType(Bundle.BundleType.TRANSACTION); diff --git a/omod/pom.xml b/omod/pom.xml index 750b938..c87ccc9 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -3,7 +3,7 @@ org.openmrs.module labonfhir - 1.4.0-SNAPSHOT + 1.5.0-SNAPSHOT labonfhir-omod diff --git a/pom.xml b/pom.xml index e8519eb..b9276ba 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ org.openmrs.module labonfhir - 1.4.0-SNAPSHOT + 1.5.0-SNAPSHOT pom Lab on FHIR A module to support lab order communication between OpenMRS and an LIS like OpenELIS using FHIR-based @@ -245,7 +245,7 @@ - 1.10.0 + 2.2.0 2.26.0 1.8 1.8 From 60bf3653ca00c0d1d8c54ce97d6aa707745d6c1b Mon Sep 17 00:00:00 2001 From: mozzy11 Date: Wed, 11 Sep 2024 17:18:41 +0300 Subject: [PATCH 2/4] Task should use a dynamic practitioner if OpenLIS user is not defined --- .../module/labonfhir/api/LabOrderHandler.java | 34 ++++++++++++-- .../api/event/LabCreationListener.java | 14 ++++++ .../api/scheduler/FetchTaskUpdates.java | 45 +++++++++++++++---- 3 files changed, 80 insertions(+), 13 deletions(-) diff --git a/api/src/main/java/org/openmrs/module/labonfhir/api/LabOrderHandler.java b/api/src/main/java/org/openmrs/module/labonfhir/api/LabOrderHandler.java index cfbd8a2..b968e4d 100644 --- a/api/src/main/java/org/openmrs/module/labonfhir/api/LabOrderHandler.java +++ b/api/src/main/java/org/openmrs/module/labonfhir/api/LabOrderHandler.java @@ -23,12 +23,15 @@ import org.openmrs.api.db.DAOException; import org.openmrs.module.fhir2.FhirConstants; import org.openmrs.module.fhir2.api.FhirObservationService; +import org.openmrs.module.fhir2.api.FhirPractitionerService; import org.openmrs.module.fhir2.api.FhirTaskService; import org.openmrs.module.labonfhir.LabOnFhirConfig; import org.openmrs.module.labonfhir.api.fhir.OrderCreationException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import ca.uhn.fhir.rest.server.exceptions.ResourceNotFoundException; + @Component public class LabOrderHandler { @@ -41,6 +44,9 @@ public class LabOrderHandler { @Autowired private FhirObservationService observationService; + @Autowired + private FhirPractitionerService practitionerService; + public Task createOrder(Order order) throws OrderCreationException { //TDO: MAKE THIS A GLOBAL CONFIG final String REQUIRED_TESTS_UUIDS = config.getOrderTestUuids(); // GeneXpert @@ -95,8 +101,19 @@ public Task createOrder(Order order) throws OrderCreationException { Optional requesterProvider = order.getEncounter().getActiveEncounterProviders().stream() .findFirst(); - Reference requesterRef = requesterProvider.map( - encounterProvider -> newReference(encounterProvider.getUuid(), FhirConstants.PRACTITIONER)).orElse(null); + Reference requesterRef = requesterProvider.isPresent()? newReference(requesterProvider.get().getProvider().getUuid(), FhirConstants.PRACTITIONER) : null; + + try { + practitionerService.get(config.getLisUserUuid()); + } catch (ResourceNotFoundException e) { + if (requesterRef != null) { + ownerRef = requesterRef; + } else { + ownerRef = newReference(order.getEncounter().getCreator().getUuid(), FhirConstants.PRACTITIONER); + } + + } + Reference locationRef = null; if (order.getEncounter().getLocation() != null) { @@ -163,9 +180,18 @@ public Task createOrder(Encounter encounter) throws OrderCreationException { Optional requesterProvider = encounter.getActiveEncounterProviders().stream().findFirst(); Reference requesterRef = requesterProvider.isPresent() ? - newReference(requesterProvider.get().getUuid(), FhirConstants.PRACTITIONER) : + newReference(requesterProvider.get().getProvider().getUuid(), FhirConstants.PRACTITIONER) : null; - + try { + practitionerService.get(config.getLisUserUuid()); + } catch (ResourceNotFoundException e) { + if (requesterRef != null) { + ownerRef = requesterRef; + } else { + ownerRef = newReference(encounter.getCreator().getUuid(), FhirConstants.PRACTITIONER); + } + } + List taskInputs = null; if (config.addObsAsTaskInput()) { taskInputs = new ArrayList<>(); diff --git a/api/src/main/java/org/openmrs/module/labonfhir/api/event/LabCreationListener.java b/api/src/main/java/org/openmrs/module/labonfhir/api/event/LabCreationListener.java index fbcdc9f..ff9d1aa 100644 --- a/api/src/main/java/org/openmrs/module/labonfhir/api/event/LabCreationListener.java +++ b/api/src/main/java/org/openmrs/module/labonfhir/api/event/LabCreationListener.java @@ -10,6 +10,8 @@ import ca.uhn.fhir.rest.client.api.IGenericClient; import ca.uhn.fhir.rest.param.TokenAndListParam; import ca.uhn.fhir.rest.param.TokenParam; +import ca.uhn.fhir.rest.server.exceptions.ResourceNotFoundException; + import org.hl7.fhir.instance.model.api.IBaseResource; import org.hl7.fhir.r4.model.Bundle; import org.hl7.fhir.r4.model.Resource; @@ -18,6 +20,7 @@ import org.openmrs.event.EventListener; import org.openmrs.module.DaemonToken; import org.openmrs.module.fhir2.api.FhirLocationService; +import org.openmrs.module.fhir2.api.FhirPractitionerService; import org.openmrs.module.fhir2.api.FhirTaskService; import org.openmrs.module.fhir2.api.util.FhirUtils; import org.openmrs.module.labonfhir.LabOnFhirConfig; @@ -55,6 +58,9 @@ public abstract class LabCreationListener implements EventListener { @Autowired private LabOnFhirService labOnFhirService ; + @Autowired + private FhirPractitionerService practitionerService; + public DaemonToken getDaemonToken() { return daemonToken; } @@ -96,6 +102,14 @@ public Bundle createLabBundle(Task task) { if (!task.getLocation().isEmpty()) { labResources.add(fhirLocationService.get(FhirUtils.referenceToId(task.getLocation().getReference()).get())); } + if (!task.getOwner().isEmpty()) { + try { + practitionerService.get(config.getLisUserUuid()); + } catch (ResourceNotFoundException e) { + labResources + .add(practitionerService.get(FhirUtils.referenceToId(task.getOwner().getReference()).get())); + } + } for (IBaseResource r : labResources) { Resource resource = (Resource) r; Bundle.BundleEntryComponent component = transactionBundle.addEntry(); diff --git a/api/src/main/java/org/openmrs/module/labonfhir/api/scheduler/FetchTaskUpdates.java b/api/src/main/java/org/openmrs/module/labonfhir/api/scheduler/FetchTaskUpdates.java index 11542b6..c7ebe84 100644 --- a/api/src/main/java/org/openmrs/module/labonfhir/api/scheduler/FetchTaskUpdates.java +++ b/api/src/main/java/org/openmrs/module/labonfhir/api/scheduler/FetchTaskUpdates.java @@ -34,6 +34,7 @@ import org.openmrs.module.fhir2.FhirConstants; import org.openmrs.module.fhir2.api.FhirDiagnosticReportService; import org.openmrs.module.fhir2.api.FhirObservationService; +import org.openmrs.module.fhir2.api.FhirPractitionerService; import org.openmrs.module.fhir2.api.FhirTaskService; import org.openmrs.module.fhir2.api.dao.FhirObservationDao; import org.openmrs.module.fhir2.api.translators.ObservationReferenceTranslator; @@ -92,6 +93,9 @@ public class FetchTaskUpdates extends AbstractTask implements ApplicationContext @Autowired private LabOnFhirService labOnFhirService; + @Autowired + private FhirPractitionerService practitionerService; + @Override public void execute() { @@ -126,15 +130,38 @@ public void execute() { DateRangeParam lastUpdated = new DateRangeParam().setLowerBound(lastRequstDate).setUpperBound(currentTime); // Get List of Tasks that belong to this instance and update them - Bundle taskBundle = client.search().forResource(Task.class) - .where(Task.IDENTIFIER.hasSystemWithAnyCode(FhirConstants.OPENMRS_FHIR_EXT_TASK_IDENTIFIER)) - .where(Task.OWNER.hasId(practitionerId)) - .where(Task.STATUS.exactly().codes( - TaskStatus.COMPLETED.toCode(), - TaskStatus.ACCEPTED.toCode(), - TaskStatus.REJECTED.toCode(), - TaskStatus.CANCELLED.toCode())).lastUpdated(lastUpdated) - .returnBundle(Bundle.class).execute(); + Bundle taskBundle = new Bundle(); + Boolean userExists = true; + try { + practitionerService.get(config.getLisUserUuid()); + userExists = true; + } catch (ResourceNotFoundException e) { + userExists = false; + } + if (userExists) { + taskBundle = client.search().forResource(Task.class) + .where(Task.IDENTIFIER.hasSystemWithAnyCode(FhirConstants.OPENMRS_FHIR_EXT_TASK_IDENTIFIER)) + .where(Task.OWNER.hasId(practitionerId)) + .where(Task.STATUS.exactly().codes( + TaskStatus.COMPLETED.toCode(), + TaskStatus.ACCEPTED.toCode(), + TaskStatus.REJECTED.toCode(), + TaskStatus.CANCELLED.toCode())) + .lastUpdated(lastUpdated) + .returnBundle(Bundle.class).execute(); + + } else { + taskBundle = client.search().forResource(Task.class) + .where(Task.IDENTIFIER.hasSystemWithAnyCode(FhirConstants.OPENMRS_FHIR_EXT_TASK_IDENTIFIER)) + .where(Task.STATUS.exactly().codes( + TaskStatus.COMPLETED.toCode(), + TaskStatus.ACCEPTED.toCode(), + TaskStatus.REJECTED.toCode(), + TaskStatus.CANCELLED.toCode())) + .lastUpdated(lastUpdated) + .returnBundle(Bundle.class).execute(); + + } List taskBundles = new ArrayList<>(); taskBundles.add(taskBundle); From 314198d107d6de0199538e54752312d18ddfa218 Mon Sep 17 00:00:00 2001 From: mozzy11 Date: Thu, 12 Sep 2024 15:20:10 +0300 Subject: [PATCH 3/4] fix NPE --- .../module/labonfhir/api/scheduler/FetchTaskUpdates.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/api/src/main/java/org/openmrs/module/labonfhir/api/scheduler/FetchTaskUpdates.java b/api/src/main/java/org/openmrs/module/labonfhir/api/scheduler/FetchTaskUpdates.java index c7ebe84..da427ac 100644 --- a/api/src/main/java/org/openmrs/module/labonfhir/api/scheduler/FetchTaskUpdates.java +++ b/api/src/main/java/org/openmrs/module/labonfhir/api/scheduler/FetchTaskUpdates.java @@ -193,7 +193,7 @@ public void shutdown() { private Boolean updateTasksInBundle(List taskBundles) { Boolean tasksUpdated = false; - String commentText = "Update Order with remote fhir status :)"; + String commentText = "Update Order with remote fhir status : "; for (Bundle bundle : taskBundles) { for (Iterator tasks = bundle.getEntry().iterator(); tasks.hasNext();) { String openmrsTaskUuid = null; @@ -228,20 +228,21 @@ private Boolean updateTasksInBundle(List taskBundles) { if(openelisTask.getStatus().toString().equals(TaskStatus.REJECTED.toString()) ){ openmrsTask.setStatus(openelisTask.getStatus()); - commentText = openelisTask.getStatusReason().getText().toString().isEmpty() ? commentText: openelisTask.getStatusReason().getText(); + commentText = commentText + TaskStatus.REJECTED.toString(); setOrderStatus(openmrsTask.getBasedOn(), openelisTask.getStatus().toCode(), Order.FulfillerStatus.EXCEPTION, commentText); tasksUpdated = true; } if(openelisTask.getStatus().toString().equals(TaskStatus.CANCELLED.toString()) ){ openmrsTask.setStatus(openelisTask.getStatus()); - commentText = TaskStatus.CANCELLED.toString(); + commentText = commentText + TaskStatus.CANCELLED.toString(); setOrderStatus(openmrsTask.getBasedOn(), openelisTask.getStatus().toCode(), Order.FulfillerStatus.EXCEPTION, commentText); tasksUpdated = true; } if( openelisTask.getStatus().toString().equals(TaskStatus.ACCEPTED.toString()) ){ openmrsTask.setStatus(openelisTask.getStatus()); + commentText = commentText + TaskStatus.ACCEPTED.toString(); setOrderStatus(openmrsTask.getBasedOn(), openelisTask.getStatus().toCode(), Order.FulfillerStatus.IN_PROGRESS, commentText); tasksUpdated = true; } From e52a51bf790ce7cd0329d3456fa9dcf00d6a7a00 Mon Sep 17 00:00:00 2001 From: mozzy11 Date: Thu, 12 Sep 2024 17:07:51 +0300 Subject: [PATCH 4/4] fix preactitioner user --- .../openmrs/module/labonfhir/api/event/LabCreationListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/org/openmrs/module/labonfhir/api/event/LabCreationListener.java b/api/src/main/java/org/openmrs/module/labonfhir/api/event/LabCreationListener.java index ff9d1aa..598ff42 100644 --- a/api/src/main/java/org/openmrs/module/labonfhir/api/event/LabCreationListener.java +++ b/api/src/main/java/org/openmrs/module/labonfhir/api/event/LabCreationListener.java @@ -107,7 +107,7 @@ public Bundle createLabBundle(Task task) { practitionerService.get(config.getLisUserUuid()); } catch (ResourceNotFoundException e) { labResources - .add(practitionerService.get(FhirUtils.referenceToId(task.getOwner().getReference()).get())); + .add(practitionerService.get(FhirUtils.referenceToId(task.getOwner().getReference()).get()).setActive(true)); } } for (IBaseResource r : labResources) {