Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into bump-ibm-fhir-version
Browse files Browse the repository at this point in the history
  • Loading branch information
vincent-karuri committed May 3, 2021
2 parents 60f8189 + d84b222 commit 2296551
Show file tree
Hide file tree
Showing 71 changed files with 3,119 additions and 543 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,4 @@ jobs:
-D repoToken="$COVERALLS_REPO_TOKEN" \
-D serviceName=Github \
-D branch="$BRANCH_NAME" \
-D pullRequest="$PR_NUMBER" \
-D pullRequest="$PR_NUMBER" \
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@

<artifactId>opensrp-plan-evaluator</artifactId>
<packaging>jar</packaging>
<version>0.3.0-SNAPSHOT</version>
<version>1.5.1-SNAPSHOT</version>
<name>OpenSRP Plan Evaluator</name>
<description>OpenSRP Plan Evaluator Library</description>
<url>https://github.com/OpenSRP/opensrp-plan-evaluator</url>

<properties>
<fhir.version>4.7.0</fhir.version>
<lombok.version>1.18.12</lombok.version>
<jackson.version>2.10.2</jackson.version>
<jackson.version>2.10.5.1</jackson.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<nexus-staging-maven-plugin.version>1.5.1</nexus-staging-maven-plugin.version>

Expand Down
24 changes: 14 additions & 10 deletions src/main/java/org/smartregister/converters/EventConverter.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,17 +32,21 @@ public static QuestionnaireResponse convertEventToEncounterResource(Event event)
items.add(childLocationId);
}

QuestionnaireResponse.Item.Answer teamIdAnswer = QuestionnaireResponse.Item.Answer.builder()
.value(String.builder().value(event.getTeamId()).build()).build();
QuestionnaireResponse.Item teamId = QuestionnaireResponse.Item.builder()
.linkId(String.builder().value("teamId").build()).answer(teamIdAnswer).build();
items.add(teamId);
if (StringUtils.isNotBlank(event.getTeamId())) {
QuestionnaireResponse.Item.Answer teamIdAnswer = QuestionnaireResponse.Item.Answer.builder()
.value(String.builder().value(event.getTeamId()).build()).build();
QuestionnaireResponse.Item teamId = QuestionnaireResponse.Item.builder()
.linkId(String.builder().value("teamId").build()).answer(teamIdAnswer).build();
items.add(teamId);
}

QuestionnaireResponse.Item.Answer teamAnswer = QuestionnaireResponse.Item.Answer.builder()
.value(String.builder().value(event.getTeam()).build()).build();
QuestionnaireResponse.Item team = QuestionnaireResponse.Item.builder().linkId(String.builder().value("team").build())
.answer(teamAnswer).build();
items.add(team);
if (StringUtils.isNotBlank(event.getTeam())) {
QuestionnaireResponse.Item.Answer teamAnswer = QuestionnaireResponse.Item.Answer.builder()
.value(String.builder().value(event.getTeam()).build()).build();
QuestionnaireResponse.Item team = QuestionnaireResponse.Item.builder()
.linkId(String.builder().value("team").build()).answer(teamAnswer).build();
items.add(team);
}

Reference providerId = Reference.builder().id("providerId")
.reference(String.builder().value(event.getProviderId()).build()).build();
Expand Down
20 changes: 16 additions & 4 deletions src/main/java/org/smartregister/converters/LocationConverter.java
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,16 @@ public static Location convertPhysicalLocationToLocationResource(PhysicalLocatio
if (physicalLocation.getProperties().getStatus().equals(PropertyStatus.PENDING_REVIEW)) {
physicalLocation.getProperties().setStatus(PropertyStatus.ACTIVE);
}
LocationStatus locationStatus = LocationStatus.builder()
.value(StringUtils.toRootLowerCase(physicalLocation.getProperties().getStatus().name())).build();

LocationStatus locationStatus;

if (physicalLocation.getProperties().getStatus().equals(PropertyStatus.NOT_ELIGIBLE)) {
locationStatus = LocationStatus.builder()
.value(LocationStatus.ValueSet.SUSPENDED).build();
} else {
locationStatus = LocationStatus.builder()
.value(StringUtils.toRootLowerCase(physicalLocation.getProperties().getStatus().name())).build();
}

Reference partOf = Reference.builder()
.reference(String.builder().value(physicalLocation.getProperties().getParentId()).build()).build();
if (StringUtils.isNotBlank(physicalLocation.getProperties().getName())) {
Expand Down Expand Up @@ -67,7 +74,12 @@ public static Location convertPhysicalLocationToLocationResource(PhysicalLocatio
.value(String.builder().value(entry.getValue()).build()).build();
identifiers.add(identifier);
}


identifier = Identifier.builder().system(Uri.builder().value("hasGeometry").build())
.value(String.builder().value(java.lang.String.valueOf(physicalLocation.getGeometry() != null)).build())
.build();

identifiers.add(identifier);
Coding jdnCoding = Coding.builder().code(Code.code("jdn")).build();
Coding buCoding = Coding.builder().code(Code.code("bu")).build();
CodeableConcept physicalType = physicalLocation.isJurisdiction() == Boolean.TRUE
Expand Down
137 changes: 137 additions & 0 deletions src/main/java/org/smartregister/converters/StockConverter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
package org.smartregister.converters;

import com.ibm.fhir.model.resource.Bundle;
import com.ibm.fhir.model.resource.Device;
import com.ibm.fhir.model.resource.SupplyDelivery;
import com.ibm.fhir.model.type.*;
import com.ibm.fhir.model.type.String;
import com.ibm.fhir.model.type.code.BundleType;
import com.ibm.fhir.model.type.code.FHIRDeviceStatus;
import com.ibm.fhir.model.type.code.SupplyDeliveryStatus;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.format.ISODateTimeFormat;
import org.smartregister.domain.StockAndProductDetails;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class StockConverter {

public static Bundle convertStockToBundleResource(StockAndProductDetails stockAndProductDetails) {

Bundle.Builder bundleBuilder = Bundle.builder();

Code deviceItemCode;
Coding deviceItemCoding;
Element deviceItemElement = null;
Identifier poNumberIdentifier = null;
Reference supplier = null;
java.lang.String deliveryDateInString;
Element occurrenceDateTime;

Device.Builder deviceBuilder = Device.builder();
if (stockAndProductDetails != null && stockAndProductDetails.getStock() != null) {
deviceBuilder.id(stockAndProductDetails.getStock().getId());
}

java.lang.String unicefSection = stockAndProductDetails.getStock() != null
&& stockAndProductDetails.getStock().getCustomProperties() != null ?
stockAndProductDetails.getStock().getCustomProperties().get("UNICEF section") : "";

java.lang.String locationId = stockAndProductDetails != null && stockAndProductDetails.getStock() != null &&
stockAndProductDetails.getStock().getLocationId() != null ?
stockAndProductDetails.getStock().getLocationId() :
"";

Reference owner = Reference.builder().reference(String.of("Organization/" + unicefSection)).build();
Reference location = Reference.builder().reference(String.of("Location/" + locationId)).build();

String serialNumber = stockAndProductDetails != null && stockAndProductDetails.getStock() != null &&
StringUtils.isNotBlank(stockAndProductDetails.getStock().getSerialNumber()) ?
String.of(stockAndProductDetails.getStock().getSerialNumber()) : null;
FHIRDeviceStatus fhirDeviceStatus = FHIRDeviceStatus.ACTIVE;
deviceBuilder.owner(owner).location(location).serialNumber(serialNumber)
.status(fhirDeviceStatus);

SupplyDelivery.Builder supplyDeliveryBuilder = SupplyDelivery.builder();
Decimal decimal = Decimal.builder().value(java.lang.String.valueOf(stockAndProductDetails.getStock().getValue()))
.build();
SimpleQuantity simpleQuantity = SimpleQuantity.builder().value(decimal).build();

if (stockAndProductDetails != null && stockAndProductDetails.getProductCatalogue() != null &&
stockAndProductDetails.getProductCatalogue().getProductName() != null) {
deviceItemCode = Code.builder().value(stockAndProductDetails.getProductCatalogue().getProductName())
.build();
deviceItemCoding = Coding.builder().code(deviceItemCode)
.display(String.of(stockAndProductDetails.getProductCatalogue().getProductName())).build();
deviceItemElement = CodeableConcept.builder().coding(deviceItemCoding).build();
}
SupplyDelivery.SuppliedItem suppliedItem = SupplyDelivery.SuppliedItem.builder().quantity(simpleQuantity)
.item(deviceItemElement).build();

java.lang.String poNumber = stockAndProductDetails.getStock() != null
&& stockAndProductDetails.getStock().getCustomProperties() != null ?
stockAndProductDetails.getStock().getCustomProperties().get("PO Number") : "";

String poNumberString = poNumber != null ? String.of(poNumber) : null;
if (poNumberString != null) {
poNumberIdentifier = Identifier.builder().value(poNumberString).build();
}

java.lang.String donor = stockAndProductDetails != null && stockAndProductDetails.getStock() != null &&
stockAndProductDetails.getStock().getDonor() != null ?
"Organization/" + stockAndProductDetails.getStock().getDonor() :
null;
String donorString = donor != null ? String.of(donor) : null;
if (donorString != null) {
supplier = Reference.builder().reference(donorString)
.display(donorString).build();
}

Code deviceCode = Code.builder().value("device").build();
Uri system = Uri.builder().value("http://terminology.hl7.org/CodeSystem/supply-item-type").build();
Coding coding = Coding.builder().code(deviceCode).system(system).build();
CodeableConcept typeCodeableConcept = CodeableConcept.builder().coding(coding).build();

Date deliveryDate = stockAndProductDetails != null && stockAndProductDetails.getStock() != null
&& stockAndProductDetails.getStock().getDeliveryDate() != null ?
stockAndProductDetails.getStock().getDeliveryDate() :
null;

deliveryDateInString = deliveryDate != null ? ISODateTimeFormat.date().print(deliveryDate.getTime()) : null;
occurrenceDateTime = deliveryDateInString != null ? DateTime.builder().value(deliveryDateInString).build() : null;

if (poNumberIdentifier != null) {
supplyDeliveryBuilder.identifier(poNumberIdentifier);
}
supplyDeliveryBuilder.suppliedItem(suppliedItem).status(SupplyDeliveryStatus.COMPLETED)
.supplier(supplier).type(typeCodeableConcept).occurrence(occurrenceDateTime).build();

List<Bundle.Entry> entryList = new ArrayList<>();
java.lang.String productId =
stockAndProductDetails != null && stockAndProductDetails.getProductCatalogue() != null &&
stockAndProductDetails.getProductCatalogue().getUniqueId() != null ?
java.lang.String.valueOf(stockAndProductDetails.getProductCatalogue().getUniqueId()) : "";

java.lang.String deviceUriString = "https://fhir.smartregister.org/device/" + productId;
Uri deviceUri = Uri.builder().value(deviceUriString).build();
Bundle.Entry deviceEntry = Bundle.Entry.builder().fullUrl(deviceUri).resource(deviceBuilder.build()).build();
java.lang.String stockId = stockAndProductDetails != null && stockAndProductDetails.getStock() != null &&
stockAndProductDetails.getStock().getId() != null ?
java.lang.String.valueOf(stockAndProductDetails.getStock().getId()) :
"";
java.lang.String supplyDeliveryUriString = "https://fhir.smartregister.org/supplyDelivery/" + stockId;
Uri supplyDeliveryUri = Uri.builder().value(supplyDeliveryUriString).build();
Bundle.Entry supplyDeliveryEntry = Bundle.Entry.builder().fullUrl(supplyDeliveryUri)
.resource(supplyDeliveryBuilder.build()).build();
entryList.add(deviceEntry);
entryList.add(supplyDeliveryEntry);
if (stockAndProductDetails != null && stockAndProductDetails.getStock() != null) {
bundleBuilder.id(stockAndProductDetails.getStock().getId());
}

return bundleBuilder.type(BundleType.COLLECTION).entry(entryList).build();
}

}
32 changes: 27 additions & 5 deletions src/main/java/org/smartregister/converters/TaskConverter.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import org.smartregister.domain.Note;

import com.ibm.fhir.model.resource.Task;
import com.ibm.fhir.model.resource.Task.Restriction;
import com.ibm.fhir.model.type.Annotation;
import com.ibm.fhir.model.type.CodeableConcept;
import com.ibm.fhir.model.type.DateTime;
Expand All @@ -17,10 +18,12 @@
import com.ibm.fhir.model.type.Markdown;
import com.ibm.fhir.model.type.Meta;
import com.ibm.fhir.model.type.Period;
import com.ibm.fhir.model.type.PositiveInt;
import com.ibm.fhir.model.type.Reference;
import com.ibm.fhir.model.type.String;
import com.ibm.fhir.model.type.Uri;
import com.ibm.fhir.model.type.code.TaskIntent;
import com.ibm.fhir.model.type.code.TaskPriority;
import com.ibm.fhir.model.type.code.TaskStatus;

public class TaskConverter {
Expand All @@ -39,8 +42,10 @@ public static Task convertTasktoFihrResource(org.smartregister.domain.Task domai
if (StringUtils.isNotBlank(domainTask.getLocation())) {
builder.location(Reference.builder().reference(String.of(domainTask.getLocation())).build());
}
// TaskPriority priority = TaskPriority.builder().id("priority").value(java.lang.String.valueOf(domainTask.getPriority())).build();
//TODO : Need to set priority as its an enum in FIHR

if (domainTask.getPriority() != null) {
builder.priority(TaskPriority.builder().value(StringUtils.toRootLowerCase(domainTask.getPriority().name())).build());
}

Reference focus = Reference.builder().reference(String.builder().value(domainTask.getFocus()).build()).build();

Expand Down Expand Up @@ -82,12 +87,12 @@ public static Task convertTasktoFihrResource(org.smartregister.domain.Task domai
java.lang.String lastModifiedString = ISODateTimeFormat.dateTime().print(domainTask.getLastModified());
DateTime lastModified = DateTime.builder().value(lastModifiedString).build();

java.lang.String startString = ISODateTimeFormat.dateTime().print(domainTask.getExecutionStartDate());
java.lang.String startString = ISODateTimeFormat.dateTime().print(domainTask.getExecutionPeriod().getStart());
DateTime start = DateTime.builder().value(startString).build();
Period.Builder period = Period.builder().start(start);

if (domainTask.getExecutionEndDate() != null) {
java.lang.String end = ISODateTimeFormat.dateTime().print(domainTask.getExecutionEndDate());
if (domainTask.getExecutionPeriod().getEnd() != null) {
java.lang.String end = ISODateTimeFormat.dateTime().print(domainTask.getExecutionPeriod().getEnd());
period.end(DateTime.builder().value(end).build());
}

Expand All @@ -100,6 +105,22 @@ public static Task convertTasktoFihrResource(org.smartregister.domain.Task domai
builder.meta(Meta.builder().versionId(versionId).build());
}

if (domainTask.getRestriction() != null) {
Restriction.Builder restriction = Restriction.builder()
.repetitions(PositiveInt.of(domainTask.getRestriction().getRepetitions()));
Period.Builder periodBuilder = Period.builder();
if (domainTask.getRestriction().getPeriod().getStart() != null) {
periodBuilder.start(
DateTime.of(ISODateTimeFormat.dateTime().print(domainTask.getRestriction().getPeriod().getStart())));
}
if (domainTask.getRestriction().getPeriod().getEnd() != null) {
periodBuilder.end(
DateTime.of(ISODateTimeFormat.dateTime().print(domainTask.getRestriction().getPeriod().getEnd())));
}
restriction.period(periodBuilder.build());
builder.restriction(restriction.build());
}

/** @formatter:off **/
Task fihrTask = builder.identifier(identifier).status(taskStatus)
.businessStatus(businessStatus)
Expand All @@ -115,6 +136,7 @@ public static Task convertTasktoFihrResource(org.smartregister.domain.Task domai
.basedOn(planIdentifier)
.groupIdentifier(groupIdentifier)
.intent(TaskIntent.PLAN) //required property
.id(domainTask.getIdentifier())
.build();
/** @formatter:on **/
return fihrTask;
Expand Down
11 changes: 7 additions & 4 deletions src/main/java/org/smartregister/domain/Action.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.smartregister.domain;

import java.io.Serializable;
import java.util.Set;

import com.google.gson.annotations.SerializedName;
Expand All @@ -14,9 +15,11 @@
@NoArgsConstructor
@Setter
@Getter
public class Action {
public class Action implements Serializable {

public enum ActionType {
private static final long serialVersionUID = 1L;

public enum ActionType {
@SerializedName("create") CREATE,
@SerializedName("update") UPDATE,
@SerializedName("remove") REMOVE,
Expand All @@ -33,7 +36,7 @@ public enum ActionType {

private String code;

private ExecutionPeriod timingPeriod;
private Period timingPeriod;

private String reason;

Expand All @@ -57,7 +60,7 @@ public enum ActionType {
@NoArgsConstructor
@Getter
@Setter
public static class SubjectConcept {
public static class SubjectConcept implements Serializable {
private String text;
}
}
5 changes: 4 additions & 1 deletion src/main/java/org/smartregister/domain/Address.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.smartregister.domain;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
Expand All @@ -17,7 +18,9 @@
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;

public class Address {
public class Address implements Serializable {

private static final long serialVersionUID = 1L;

@JsonProperty
private Boolean preferred;
Expand Down
6 changes: 5 additions & 1 deletion src/main/java/org/smartregister/domain/Condition.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,17 @@
import lombok.ToString;
import lombok.Builder;

import java.io.Serializable;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Builder(toBuilder = true)
public class Condition {
public class Condition implements Serializable {

private static final long serialVersionUID = 1L;

private String kind;
private Expression expression;
Expand Down
6 changes: 5 additions & 1 deletion src/main/java/org/smartregister/domain/ContactPoint.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package org.smartregister.domain;

import java.io.Serializable;

import org.joda.time.DateTime;

public class ContactPoint {
public class ContactPoint implements Serializable {

private static final long serialVersionUID = 1L;

private String type;

Expand Down
Loading

0 comments on commit 2296551

Please sign in to comment.