Summary Table
Categories |
Total Count |
PII |
0 |
URL |
0 |
DNS |
0 |
EKL |
0 |
IP |
0 |
PORT |
0 |
VsID |
0 |
CF |
0 |
AI |
0 |
VPD |
0 |
PL |
0 |
Other |
0 |
File Content
package gov.va.med.pbm.ampl.asset.mock;
import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.Collection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import gov.va.med.pbm.ampl.asset.mock.measurements.Measure;
import gov.va.med.pbm.ampl.asset.mock.measurements.MeasureFactory;
import gov.va.med.pbm.ampl.constant.MockDataConstants;
import gov.va.med.pbm.ampl.controller.EnvironmentInternalController;
import gov.va.med.pbm.ampl.model.Measurement;
import gov.va.med.pbm.ampl.model.ValueQuantity;
import gov.va.med.pbm.ampl.utility.DateUtility;
import gov.va.med.pbm.ampl.utility.NumberUtility;
/**
* This class generates mock data for the {@link EnvironmentInternalController} end points .
*
* @author Ian Meinert
* @author Pavani Mukthipudi
*
* @since 1.0
*/
public class MeasurementData {
private String patientId;
/**
* The application logger.
*/
static final Logger LOGGER = LoggerFactory.getLogger(MeasurementData.class);
/**
* Single parameter constructor.
*
* @param patientId {@link Long}
*/
public MeasurementData(String patientId) {
this.patientId = patientId;
}
/**
* Generates a {@link Measurement} {@link Collection} used in mock cases.
*
* @param c the count of {@link Measurement} to create
* @return a {@link Collection} of {@link Measurement} with mock data
*/
public Collection<Measurement> testMeasurementsForPatient(int c) {
Collection<Measurement> vc = new ArrayList<Measurement>();
// REQUIRED FOR VITALS SUMMARY - DON'T DELETE
String[] vitalType = { "TEMPERATURE", "RESPIRATION", "PULSE OXIMETRY", "BLOOD PRESSURE", "PULSE", "HEIGHT", "WEIGHT",
"PAIN", "HEAD CIRCUMFERENCE", "LENGTH" };
for (int i = 0; i < c; i++) {
vc.add(this.createRequiredMeasurements(vitalType[i % MockDataConstants.TEN]));
}
// Some calculations require certain vitals to be present to function.
// Let's add these now
vc.add(this.createRequiredMeasurements("HEIGHT"));
vc.add(this.createRequiredMeasurements("WEIGHT"));
vc.add(this.createRequiredMeasurements("CREATININE"));
return vc;
}
/**
* This method will return the latest entered of each type of measurement.
*
* @param baseCollection collection of {@link Measurement}
* @return filtered collection of {@link Measurement}
*/
public Collection<Measurement> getMeasuresLast(Collection<Measurement> baseCollection) {
Collection<Measurement> measurements = new ArrayList<Measurement>();
for (Measurement item : baseCollection) {
// if the returning collection doesnt contain a given measurement name, add it
if (measurements.stream().noneMatch(m -> m.getName().equals(item.getName()))) {
measurements.add(item);
} else {
// iterate over each in stack. if found, compare the entered date
finalCollectionLoop: for (Measurement measurement : measurements) {
if (measurement.getName().equals(item.getName())) {
int dateCompare = measurement.getEntered().compareTo(item.getEntered());
// measurement date entered is older than item date entered
if (dateCompare < 0) {
measurements.remove(measurement);
measurements.add(item);
break finalCollectionLoop;
}
}
}
}
}
return measurements;
}
/**
* Creates a {@link Measurement} containing sample data.
*
* @param name the {@link Measurement} name
* @return mock {@link Measurement}
*/
private Measurement createRequiredMeasurements(String name) {
Measurement m = new Measurement();
FacilityData f = new FacilityData();
int k = NumberUtility.randomBetween(MockDataConstants.ZERO, MockDataConstants.SEVEN);
OffsetDateTime dt = DateUtility.randomOffsetDateTime(MockDataConstants.TWO_K, MockDataConstants.TWO_K_EIGHTTEEN);
this.setValueQuantities(name, m);
m.setEntered(dt.plusMinutes(NumberUtility.randomBetween(1, MockDataConstants.FIFTY_NINE)));
m.setEnteredBy("enteredBy_" + k);
m.setFacility(f.testFacilityForPatient(k));
m.setFlag("flag_" + k);
m.setHospitalLocation("hospitalLocation_" + k);
m.setName(name);
m.setPatientId(patientId);
m.setQualifier("qualifier_" + k);
m.setRange("range_" + k);
m.setRate("rate_" + k);
m.setSupplementalOxygen("supplementalOxygen_" + k);
m.setTimeTaken(dt);
return m;
}
/**
* This method sets the {@link ValueQuantity} for each imperial and metric field.
*
* @param name the name of the measurement
* @param m the {@link Measurement}
*/
private void setValueQuantities(String name, Measurement m) {
Measure measure = MeasureFactory.getMeasureType(name);
m.setImperial(measure.getImperial());
m.setMetric(measure.getMetric());
}
}