Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

O3-4487 Save Vitals Data in Visit Patient scenario #71

Merged
merged 9 commits into from
Mar 4, 2025
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
move save vitals in DoctorHttpService.java
  • Loading branch information
Bawanthathilan committed Mar 3, 2025
commit a4bdb66a3ed0553d27ef35cb8a9a48b6bdd74528
46 changes: 46 additions & 0 deletions src/test/java/org/openmrs/performance/http/DoctorHttpService.java
Original file line number Diff line number Diff line change
@@ -7,6 +7,7 @@

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -17,21 +18,33 @@
import static io.gatling.javaapi.core.CoreDsl.jsonPath;
import static io.gatling.javaapi.http.HttpDsl.http;
import static org.openmrs.performance.Constants.ALLERGY_REACTION_UUID;
import static org.openmrs.performance.Constants.ARTERIAL_BLOOD_OXYGEN_SATURATION;
import static org.openmrs.performance.Constants.CARE_SETTING_UUID;
import static org.openmrs.performance.Constants.CLINICIAN_ENCOUNTER_ROLE;
import static org.openmrs.performance.Constants.CODED_ALLERGEN_UUID;
import static org.openmrs.performance.Constants.DAYS;
import static org.openmrs.performance.Constants.DEFAULT_DOSING_TYPE;
import static org.openmrs.performance.Constants.DIASTOLIC_BLOOD_PRESSURE;
import static org.openmrs.performance.Constants.DRUG_ORDER;
import static org.openmrs.performance.Constants.HEIGHT_CM;
import static org.openmrs.performance.Constants.MID_UPPER_ARM_CIRCUMFERENCE;
import static org.openmrs.performance.Constants.ONCE_DAILY;
import static org.openmrs.performance.Constants.ORAL;
import static org.openmrs.performance.Constants.ORDER;
import static org.openmrs.performance.Constants.OUTPATIENT_CLINIC_LOCATION_UUID;
import static org.openmrs.performance.Constants.PULSE;
import static org.openmrs.performance.Constants.RESPIRATORY_RATE;
import static org.openmrs.performance.Constants.SEVERITY_UUID;
import static org.openmrs.performance.Constants.SYSTOLIC_BLOOD_PRESSURE;
import static org.openmrs.performance.Constants.TABLET;
import static org.openmrs.performance.Constants.TEMPERATURE_C;
import static org.openmrs.performance.Constants.VISIT_NOTE_CONCEPT_UUID;
import static org.openmrs.performance.Constants.VISIT_NOTE_ENCOUNTER_TYPE_UUID;
import static org.openmrs.performance.Constants.VISIT_NOTE_FORM_UUID;
import static org.openmrs.performance.Constants.VITALS_ENCOUNTER_TYPE_UUID;
import static org.openmrs.performance.Constants.VITALS_FORM_UUID;
import static org.openmrs.performance.Constants.VITALS_LOCATION_UUID;
import static org.openmrs.performance.Constants.WEIGHT_KG;

public class DoctorHttpService extends HttpService {

@@ -346,4 +359,37 @@ public HttpRequestActionBuilder saveDiagnosis(String patientUuid, String encount
}
}

public HttpRequestActionBuilder saveVitalsData(String patientUuid) {
ZonedDateTime now = ZonedDateTime.now();
String encounterDatetime = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"));

Map<String, Object> vitals = new HashMap<>();
vitals.put("form", VITALS_FORM_UUID);
vitals.put("patient", patientUuid);
vitals.put("location", VITALS_LOCATION_UUID);
vitals.put("encounterType", VITALS_ENCOUNTER_TYPE_UUID);
vitals.put("encounterDatetime", encounterDatetime);

List<Map<String, Object>> obs = new ArrayList<>();
obs.add(Map.of("concept", SYSTOLIC_BLOOD_PRESSURE, "value", 34));
obs.add(Map.of("concept", DIASTOLIC_BLOOD_PRESSURE, "value", 44));
obs.add(Map.of("concept", RESPIRATORY_RATE, "value", 100));
obs.add(Map.of("concept", ARTERIAL_BLOOD_OXYGEN_SATURATION, "value", 20));
obs.add(Map.of("concept", PULSE, "value", 120));
obs.add(Map.of("concept", TEMPERATURE_C, "value", 28));
obs.add(Map.of("concept", WEIGHT_KG, "value", 60));
obs.add(Map.of("concept", HEIGHT_CM, "value", 121));
obs.add(Map.of("concept", MID_UPPER_ARM_CIRCUMFERENCE, "value", 34));

vitals.put("obs", obs);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor naming suggestion: vitals is a Map, not a collection, so the plural form might be misleading. We can rename it to encounter or payload or something similar.

obs could be renamed to observations.


try {
String body = new ObjectMapper().writeValueAsString(vitals); // Convert Map to JSON
return http("Save Vitals").post("/openmrs/ws/rest/v1/encounter").body(StringBody(body));
}
catch (JsonProcessingException e) {
throw new RuntimeException("Error converting visitNote to JSON", e);
}
}

}
57 changes: 1 addition & 56 deletions src/test/java/org/openmrs/performance/http/HttpService.java
Original file line number Diff line number Diff line change
@@ -1,35 +1,13 @@
package org.openmrs.performance.http;

import io.gatling.javaapi.http.HttpRequestActionBuilder;

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.StringJoiner;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import static io.gatling.javaapi.core.CoreDsl.StringBody;
import static io.gatling.javaapi.core.CoreDsl.jsonPath;
import static io.gatling.javaapi.http.HttpDsl.http;
import static org.openmrs.performance.Constants.ARTERIAL_BLOOD_OXYGEN_SATURATION;
import static org.openmrs.performance.Constants.DIASTOLIC_BLOOD_PRESSURE;
import static org.openmrs.performance.Constants.HEIGHT_CM;
import static org.openmrs.performance.Constants.MID_UPPER_ARM_CIRCUMFERENCE;
import static org.openmrs.performance.Constants.OUTPATIENT_CLINIC_LOCATION_UUID;
import static org.openmrs.performance.Constants.PULSE;
import static org.openmrs.performance.Constants.RESPIRATORY_RATE;
import static org.openmrs.performance.Constants.SYSTOLIC_BLOOD_PRESSURE;
import static org.openmrs.performance.Constants.TEMPERATURE_C;
import static org.openmrs.performance.Constants.VITALS_ENCOUNTER_TYPE_UUID;
import static org.openmrs.performance.Constants.VITALS_FORM_UUID;
import static org.openmrs.performance.Constants.VITALS_LOCATION_UUID;
import static org.openmrs.performance.Constants.WEIGHT_KG;

public abstract class HttpService {
public HttpRequestActionBuilder loginRequest() {
@@ -137,38 +115,5 @@ public HttpRequestActionBuilder getActiveOrders(String patientUuid) {
.get("/openmrs/ws/rest/v1/order?patient="+patientUuid+"&careSetting=6f0c9a92-6f24-11e3-af88-005056821db0&status=ACTIVE&orderType=131168f4-15f5-102d-96e4-000c29c2a5d7&v=custom:(uuid,dosingType,orderNumber,accessionNumber,patient:ref,action,careSetting:ref,previousOrder:ref,dateActivated,scheduledDate,dateStopped,autoExpireDate,orderType:ref,encounter:ref,orderer:(uuid,display,person:(display)),orderReason,orderReasonNonCoded,orderType,urgency,instructions,commentToFulfiller,drug:(uuid,display,strength,dosageForm:(display,uuid),concept),dose,doseUnits:ref,frequency:ref,asNeeded,asNeededCondition,quantity,quantityUnits:ref,numRefills,dosingInstructions,duration,durationUnits:ref,route:ref,brandName,dispenseAsWritten)");
}

public HttpRequestActionBuilder saveVitalsData(String patientUuid, int value) {
ZonedDateTime now = ZonedDateTime.now();
String encounterDatetime = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"));

Map<String, Object> vitals = new HashMap<>();
vitals.put("form", VITALS_FORM_UUID);
vitals.put("patient", patientUuid);
vitals.put("location", VITALS_LOCATION_UUID);
vitals.put("encounterType", VITALS_ENCOUNTER_TYPE_UUID);
vitals.put("encounterDatetime", encounterDatetime);

List<Map<String, Object>> obs = new ArrayList<>();
obs.add(Map.of("concept", SYSTOLIC_BLOOD_PRESSURE, "value", 34));
obs.add(Map.of("concept", DIASTOLIC_BLOOD_PRESSURE, "value", 44));
obs.add(Map.of("concept", RESPIRATORY_RATE, "value", 100));
obs.add(Map.of("concept", ARTERIAL_BLOOD_OXYGEN_SATURATION, "value", 20));
obs.add(Map.of("concept", PULSE, "value", 120));
obs.add(Map.of("concept", TEMPERATURE_C, "value", 28));
obs.add(Map.of("concept", WEIGHT_KG, "value", 60));
obs.add(Map.of("concept", HEIGHT_CM, "value", 121));
obs.add(Map.of("concept", MID_UPPER_ARM_CIRCUMFERENCE, "value", 34));

vitals.put("obs", obs);

try {
String body = new ObjectMapper().writeValueAsString(vitals); // Convert Map to JSON

return http("Save Vitals").post("/openmrs/ws/rest/v1/encounter").body(StringBody(body));

}
catch (JsonProcessingException e) {
throw new RuntimeException("Error converting visitNote to JSON", e);
}
}

}
Original file line number Diff line number Diff line change
@@ -74,7 +74,7 @@ public ChainBuilder openVitalsAndBiometricsTab(String patientUuid) {
);
return exec(httpService.getPatientObservations(patientUuid, vitals))
.exec(httpService.getPatientObservations(patientUuid, biometrics))
.exec(httpService.saveVitalsData(patientUuid, 34));
.exec(httpService.saveVitalsData(patientUuid));
}

public ChainBuilder openMedicationsTab(String patientUuid) {