Skip to content

Commit 93b04bf

Browse files
mohan-13Samridhi-98subhashydv
authored
BAH-4336 | Refactor. HL7 Service to extract out mappers for each segment (#50)
* BAH-4336 | Refactor. Extend order details with base order info and patient info * BAH-4336 | Refactor. Extend order details with dateCreated field * BAH-4336 | Refactor. Extend order details with creator info * BAH-4336 | Refactor. Extend study instance uid generator to use date created as well * BAH-4336 | Add. Extract new mapper for HL7 Message Header * BAH-4336 | Add. Extract new mapper for HL7 OBR Segment * BAH-4336 | Add. Extract new mapper for HL7 ORC Segment * BAH-4336 | Add. Extract new mapper for HL7 PID Segment * BAH-4336 | Add. Extract new mapper for HL7 ZDS Segment to set StudyInstanceUID * BAH-4336 | Add. HL7 message creator to depend on OpenMRS Order Details and use new mappers * BAH-4336 | Refactor. Use HL7 message creator interface to generate HL7 message based on order * BAH-4336 | Refactor. Extract out common methods for test utils * BAH-4336 | Rearrange. mapper in correct order to create hl7 message * BAH-4336 | Remove unused line of patient --------- Co-authored-by: Samriddhi-98 <[email protected]> Co-authored-by: Subhash Yadav <[email protected]>
1 parent 302a5dc commit 93b04bf

35 files changed

+1686
-74
lines changed

pacs-integration-webapp/src/main/java/org/bahmni/module/pacsintegration/atomfeed/contract/encounter/OpenMRSOrder.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import org.bahmni.module.pacsintegration.atomfeed.client.Constants;
44
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
55

6+
import java.util.Date;
7+
68
@JsonIgnoreProperties(ignoreUnknown = true)
79
public class OpenMRSOrder {
810
public static final String ACTION_NEW = "NEW";
@@ -17,6 +19,7 @@ public class OpenMRSOrder {
1719
private String previousOrderUuid;
1820
private String commentToFulfiller;
1921
private String urgency;
22+
private Date dateCreated;
2023

2124
public String getUrgency() {
2225
return urgency;
@@ -129,4 +132,11 @@ public void setCommentToFulfiller(String commentToFulfiller) {
129132
this.commentToFulfiller = commentToFulfiller;
130133
}
131134

135+
public Date getDateCreated() {
136+
return dateCreated;
137+
}
138+
139+
public void setDateCreated(Date dateCreated) {
140+
this.dateCreated = dateCreated;
141+
}
132142
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.bahmni.module.pacsintegration.atomfeed.contract.order;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Data;
6+
import lombok.NoArgsConstructor;
7+
8+
import java.util.Date;
9+
10+
@Data
11+
@NoArgsConstructor
12+
@AllArgsConstructor
13+
@JsonIgnoreProperties(ignoreUnknown = true)
14+
public class BaseOrderDetails {
15+
private String uuid;
16+
private String action;
17+
private String orderNumber;
18+
private String urgency;
19+
private String accessionNumber;
20+
private String commentToFulfiller;
21+
private Date dateCreated;
22+
}

pacs-integration-webapp/src/main/java/org/bahmni/module/pacsintegration/atomfeed/contract/order/OpenMRSOrderDetails.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,30 @@
33
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
44
import lombok.AllArgsConstructor;
55
import lombok.Data;
6+
import lombok.EqualsAndHashCode;
67
import lombok.NoArgsConstructor;
8+
import org.bahmni.module.pacsintegration.atomfeed.mappers.hl7.Constants;
79

10+
import java.util.Date;
811
import java.util.List;
912

13+
@EqualsAndHashCode(callSuper = true)
1014
@Data
1115
@NoArgsConstructor
1216
@AllArgsConstructor
1317
@JsonIgnoreProperties(ignoreUnknown = true)
14-
public class OpenMRSOrderDetails {
15-
private String uuid;
18+
public class OpenMRSOrderDetails extends BaseOrderDetails{
19+
private Date dateCreated;
1620
private OrderType orderType;
1721
private OrderEncounter encounter;
1822
private List<Attribute> attributes;
1923
private OrderConcept concept;
24+
private Patient patient;
25+
private BaseOrderDetails previousOrder;
26+
private Provider creator;
2027
private String type;
28+
29+
public boolean isDiscontinuedOrder() {
30+
return this.getAction().equals(Constants.ORDER_ACTION_DISCONTINUE);
31+
}
2132
}

pacs-integration-webapp/src/main/java/org/bahmni/module/pacsintegration/atomfeed/contract/order/OpenMRSOrderQueryBuilder.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,17 @@
22

33
public class OpenMRSOrderQueryBuilder {
44

5-
private static final String UUID = "uuid";
5+
private static final String BASE_ORDER_DETAILS = "uuid,action,orderNumber,urgency,accessionNumber,commentToFulfiller,dateCreated";
66
private static final String ORDER_TYPE = "orderType:(uuid,display,name)";
77
private static final String ENCOUNTER = "encounter:(uuid,location:(uuid,display,name,tags:(display),attributes:(uuid,value,attributeType:(uuid,name))))";
88
private static final String ATTRIBUTES = "attributes:(uuid,value,attributeType:(name,uuid))";
99
private static final String CONCEPT = "concept:(uuid,names,mappings:(conceptMapType:(display),conceptReferenceTerm:(name,code,retired,conceptSource:(uuid,name,hl7Code))))";
10+
private static final String PATIENT = "patient:(uuid,patientIdentifier:(identifier),person:(gender,age,birthdate,preferredName:(givenName,middleName,familyName)))";
11+
private static final String PREVIOUS_ORDER_DETAILS = String.format("previousOrder:(%s)", BASE_ORDER_DETAILS);
12+
private static final String CREATOR = "creator:(uuid,person:(preferredName:(givenName,middleName,familyName)))";
1013

11-
public static final String ORDER_DETAILS_REPRESENTATION = String.format("custom:(%s,%s,%s,%s,%s)",
12-
UUID, ORDER_TYPE, ENCOUNTER, ATTRIBUTES, CONCEPT);
14+
public static final String ORDER_DETAILS_REPRESENTATION = String.format("custom:(%s,%s,%s,%s,%s,%s,%s,%s)",
15+
BASE_ORDER_DETAILS, ORDER_TYPE, ENCOUNTER, ATTRIBUTES, CONCEPT, PATIENT, PREVIOUS_ORDER_DETAILS, CREATOR);
1316

1417
public static final String ORDER_DETAILS_QUERY_PARAM = "v=" + ORDER_DETAILS_REPRESENTATION;
1518
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.bahmni.module.pacsintegration.atomfeed.contract.order;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4+
import lombok.Data;
5+
6+
@Data
7+
@JsonIgnoreProperties(ignoreUnknown = true)
8+
public class Patient {
9+
private String uuid;
10+
private PatientIdentifier patientIdentifier;
11+
private Person person;
12+
13+
@Data
14+
public static class PatientIdentifier {
15+
private String identifier;
16+
}
17+
}
18+
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.bahmni.module.pacsintegration.atomfeed.contract.order;
2+
3+
import lombok.Data;
4+
5+
import java.util.Date;
6+
7+
@Data
8+
public class Person {
9+
private String gender;
10+
private Integer age;
11+
private Date birthdate;
12+
private PreferredName preferredName;
13+
14+
15+
@Data
16+
public static class PreferredName {
17+
private String givenName;
18+
private String middleName;
19+
private String familyName;
20+
}
21+
}
22+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.bahmni.module.pacsintegration.atomfeed.contract.order;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4+
import lombok.Data;
5+
6+
@Data
7+
@JsonIgnoreProperties(ignoreUnknown = true)
8+
public class Provider {
9+
private String uuid;
10+
private Person person;
11+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.bahmni.module.pacsintegration.atomfeed.mappers.hl7;
2+
3+
public class Constants {
4+
public static final String FIELD_SEPARATOR = "|";
5+
public static final String ENCODING_CHARACTERS= "^~\\&";
6+
public static final String HL7_MESSAGE_VERSION = "2.5";
7+
public static final String HL7_MESSAGE_CODE = "ORM";
8+
public static final String HL7_TRIGGER_EVENT = "O01";
9+
public static final String HL7_PROCESSING_PROD_MODE = "P";
10+
11+
public static final String PATIENT_IDENTIFIER_TYPE_CODE = "MR";
12+
public static final String PATIENT_IDENTIFIER_ASSIGNING_AUTHORITY = "Bahmni EMR";
13+
14+
public static final String NEW_ORDER = "NW";
15+
public static final String CANCEL_ORDER = "CA";
16+
public static final String HL7_SCHEDULED_STATUS_CODE = "SC";
17+
public static final String HL7_CANCELLED_STATUS_CODE = "CA";
18+
19+
public static final String ORDER_ACTION_DISCONTINUE = "DISCONTINUE";
20+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package org.bahmni.module.pacsintegration.atomfeed.mappers.hl7;
2+
3+
import ca.uhn.hl7v2.model.v25.segment.MSH;
4+
import org.bahmni.module.pacsintegration.atomfeed.contract.order.OpenMRSOrderDetails;
5+
6+
public interface MessageHeaderMapper {
7+
void map(MSH messageHeader, OpenMRSOrderDetails orderDetails);
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package org.bahmni.module.pacsintegration.atomfeed.mappers.hl7;
2+
3+
import ca.uhn.hl7v2.model.v25.segment.OBR;
4+
import org.bahmni.module.pacsintegration.atomfeed.contract.order.OpenMRSOrderDetails;
5+
6+
public interface OBRMapper {
7+
void map(OBR obr, OpenMRSOrderDetails orderDetails);
8+
}

0 commit comments

Comments
 (0)