use of org.mitre.synthea.engine.State in project synthea by synthetichealth.
the class FHIRSTU3ExporterTest method testSampledDataExport.
@Test
public void testSampledDataExport() throws Exception {
Person person = new Person(0L);
person.attributes.put(Person.GENDER, "F");
person.attributes.put(Person.FIRST_LANGUAGE, "spanish");
person.attributes.put(Person.RACE, "other");
person.attributes.put(Person.ETHNICITY, "hispanic");
person.attributes.put(Person.INCOME, Integer.parseInt(Config.get("generate.demographics.socioeconomic.income.poverty")) * 2);
person.attributes.put(Person.OCCUPATION_LEVEL, 1.0);
person.attributes.put(Person.CONTACT_EMAIL, "test@test.test");
person.attributes.put(Person.CONTACT_GIVEN_NAME, "John");
person.attributes.put(Person.CONTACT_FAMILY_NAME, "Appleseed");
person.history = new LinkedList<>();
Provider mock = Mockito.mock(Provider.class);
Mockito.when(mock.getResourceID()).thenReturn("Mock-UUID");
person.setProvider(EncounterType.AMBULATORY, mock);
person.setProvider(EncounterType.WELLNESS, mock);
person.setProvider(EncounterType.EMERGENCY, mock);
person.setProvider(EncounterType.INPATIENT, mock);
Long time = System.currentTimeMillis();
int age = 35;
long birthTime = time - Utilities.convertTime("years", age);
person.attributes.put(Person.BIRTHDATE, birthTime);
Payer.loadNoInsurance();
for (int i = 0; i < age; i++) {
long yearTime = time - Utilities.convertTime("years", i);
person.coverage.setPayerAtTime(yearTime, Payer.noInsurance);
}
Module module = TestHelper.getFixture("observation.json");
State encounter = module.getState("SomeEncounter");
assertTrue(encounter.process(person, time));
person.history.add(encounter);
State physiology = module.getState("Simulate_CVS");
assertTrue(physiology.process(person, time));
person.history.add(physiology);
State sampleObs = module.getState("SampledDataObservation");
assertTrue(sampleObs.process(person, time));
person.history.add(sampleObs);
FhirContext ctx = FhirStu3.getContext();
IParser parser = ctx.newJsonParser().setPrettyPrint(true);
String fhirJson = FhirStu3.convertToFHIRJson(person, System.currentTimeMillis());
Bundle bundle = parser.parseResource(Bundle.class, fhirJson);
for (BundleEntryComponent entry : bundle.getEntry()) {
if (entry.getResource() instanceof Observation) {
Observation obs = (Observation) entry.getResource();
assertTrue(obs.getValue() instanceof SampledData);
SampledData data = (SampledData) obs.getValue();
// 0.01s == 10ms
assertEquals(10, data.getPeriod().doubleValue(), 0.001);
assertEquals(3, (int) data.getDimensions());
}
}
}
use of org.mitre.synthea.engine.State in project synthea by synthetichealth.
the class FHIRSTU3ExporterTest method testObservationAttachment.
@Test
public void testObservationAttachment() throws Exception {
Person person = new Person(0L);
person.attributes.put(Person.GENDER, "F");
person.attributes.put(Person.FIRST_LANGUAGE, "spanish");
person.attributes.put(Person.RACE, "other");
person.attributes.put(Person.ETHNICITY, "hispanic");
person.attributes.put(Person.INCOME, Integer.parseInt(Config.get("generate.demographics.socioeconomic.income.poverty")) * 2);
person.attributes.put(Person.OCCUPATION_LEVEL, 1.0);
person.attributes.put("Pulmonary Resistance", 0.1552);
person.attributes.put("BMI Multiplier", 0.055);
person.setVitalSign(VitalSign.BMI, 21.0);
person.history = new LinkedList<>();
Provider mock = Mockito.mock(Provider.class);
Mockito.when(mock.getResourceID()).thenReturn("Mock-UUID");
person.setProvider(EncounterType.AMBULATORY, mock);
person.setProvider(EncounterType.WELLNESS, mock);
person.setProvider(EncounterType.EMERGENCY, mock);
person.setProvider(EncounterType.INPATIENT, mock);
Long time = System.currentTimeMillis();
int age = 35;
long birthTime = time - Utilities.convertTime("years", age);
person.attributes.put(Person.BIRTHDATE, birthTime);
Payer.loadNoInsurance();
for (int i = 0; i < age; i++) {
long yearTime = time - Utilities.convertTime("years", i);
person.coverage.setPayerAtTime(yearTime, Payer.noInsurance);
}
Module module = TestHelper.getFixture("observation.json");
State physiology = module.getState("Simulate_CVS");
assertTrue(physiology.process(person, time));
person.history.add(physiology);
State encounter = module.getState("SomeEncounter");
assertTrue(encounter.process(person, time));
person.history.add(encounter);
State chartState = module.getState("ChartObservation");
assertTrue(chartState.process(person, time));
person.history.add(chartState);
State urlState = module.getState("UrlObservation");
assertTrue(urlState.process(person, time));
person.history.add(urlState);
FhirContext ctx = FhirStu3.getContext();
IParser parser = ctx.newJsonParser().setPrettyPrint(true);
String fhirJson = FhirStu3.convertToFHIRJson(person, System.currentTimeMillis());
Bundle bundle = parser.parseResource(Bundle.class, fhirJson);
for (BundleEntryComponent entry : bundle.getEntry()) {
if (entry.getResource() instanceof Media) {
Media media = (Media) entry.getResource();
if (media.getContent().getData() != null) {
assertEquals(400, media.getWidth());
assertEquals(200, media.getHeight());
assertEquals("Invasive arterial pressure", media.getReasonCode().get(0).getText());
assertTrue(Base64.isBase64(media.getContent().getDataElement().getValueAsString()));
} else if (media.getContent().getUrl() != null) {
assertEquals("https://example.com/image/12498596132", media.getContent().getUrl());
assertEquals("en-US", media.getContent().getLanguage());
assertTrue(media.getContent().getSize() > 0);
} else {
fail("Invalid Media element in output JSON");
}
}
}
}
use of org.mitre.synthea.engine.State in project synthea by synthetichealth.
the class ValueSetCodeResolverTest method resolveCodesInImagingStudy.
@Test
public void resolveCodesInImagingStudy() throws Exception {
// We load the imaging study from a module fixture, as there doesn't seem to be
// a way to
// instantiate it programmatically.
Module module = TestHelper.getFixture("imaging_study_with_valueset.json");
person.history = new ArrayList<>();
State encounterState = module.getState("ED_Visit");
assertTrue(encounterState.process(person, time));
person.history.add(encounterState);
State mri = module.getState("Knee_MRI");
assertTrue(mri.process(person, time));
ValueSetCodeResolver valueSetCodeResolver = new ValueSetCodeResolver(person);
Person resolvedPerson = valueSetCodeResolver.resolve();
// assertEquals(2, resolvedPerson.record.encounters.size());
Encounter resolvedEncounter = resolvedPerson.record.encounters.get(resolvedPerson.record.encounters.size() - 1);
assertEquals(1, resolvedEncounter.imagingStudies.size());
ImagingStudy resolvedImagingStudy = resolvedEncounter.imagingStudies.get(0);
assertEquals(1, resolvedImagingStudy.series.size());
Series series = resolvedImagingStudy.series.get(0);
assertEquals(SNOMED_URI, series.bodySite.system);
assertEquals("762879008", series.bodySite.code);
assertEquals("Structure of right common peroneal nerve in popliteal region", series.bodySite.display);
// Modality and SOP class are not really good candidates for ValueSet-based
// selection, so we do
// not currently have a sensible test case for these.
}
use of org.mitre.synthea.engine.State in project synthea by synthetichealth.
the class ValueSetCodeResolverTest method handlesNullCodesInImagingStudy.
@Test
public void handlesNullCodesInImagingStudy() throws Exception {
// We load the imaging study from a module fixture, as there doesn't seem to be
// a way to
// instantiate it programmatically.
Module module = TestHelper.getFixture("imaging_study_with_valueset.json");
person.history = new ArrayList<>();
State encounterState = module.getState("ED_Visit");
assertTrue(encounterState.process(person, time));
person.history.add(encounterState);
State mri = module.getState("Knee_MRI");
assertTrue(mri.process(person, time));
Encounter imagingEncounter = person.record.encounters.get(person.record.encounters.size() - 1);
imagingEncounter.imagingStudies.get(0).series.get(0).instances.set(0, null);
ValueSetCodeResolver valueSetCodeResolver = new ValueSetCodeResolver(person);
valueSetCodeResolver.resolve();
imagingEncounter.imagingStudies.get(0).series.set(0, null);
valueSetCodeResolver = new ValueSetCodeResolver(person);
valueSetCodeResolver.resolve();
}
use of org.mitre.synthea.engine.State in project synthea by synthetichealth.
the class TransitionMetrics method recordStats.
/**
* Record all appropriate state transition information from the given person.
*
* @param person
* Person that went through the modules
* @param simulationEnd
* Date the simulation ended
* @param modules
* The collection of modules to record stats for
*/
@SuppressWarnings("unchecked")
public void recordStats(Person person, long simulationEnd, Collection<Module> modules) {
for (Module m : modules) {
if (!m.getClass().equals(Module.class)) {
// java module, not GMF. no states to show
continue;
}
List<State> history = (List<State>) person.attributes.get(m.name);
if (history == null) {
continue;
}
// count basic "counter" stats for this state
history.forEach(s -> countStateStats(s, getMetric(m.name, s.name), simulationEnd));
// count this person only once for each distinct state they hit
history.stream().map(s -> s.name).distinct().forEach(sName -> getMetric(m.name, sName).population.incrementAndGet());
getMetric(m.name, history.get(0).name).current.incrementAndGet();
// and track from->to stats in pair
if (history.size() >= 2) {
for (int fromIndex = history.size() - 1; fromIndex > 0; fromIndex--) {
int toIndex = fromIndex - 1;
State from = history.get(fromIndex);
State to = history.get(toIndex);
getMetric(m.name, from.name).incrementDestination(to.name);
}
}
}
}
Aggregations