use of ca.uhn.fhir.model.dstu2.resource.Encounter in project eCRNow by drajer-health.
the class LaunchControllerTest method testStartEndDateDSTU2_basedOnEncounterPeriod.
@Test
public void testStartEndDateDSTU2_basedOnEncounterPeriod() throws JsonParseException, JsonMappingException, IOException, ParseException {
currentStateDetails.setFhirVersion("DSTU2");
SimpleDateFormat sdf = new SimpleDateFormat("yyyMMddHHmmss");
String startDateStr = "20200101010101";
Date startDate = sdf.parse(startDateStr);
String endDateStr = "20200102010101";
Date endDate = sdf.parse(endDateStr);
PeriodDt periodDt = new PeriodDt();
periodDt.setStartWithSecondsPrecision(startDate);
periodDt.setEndWithSecondsPrecision(endDate);
Encounter encounter = new Encounter();
encounter.setPeriod(periodDt);
launchController.setStartAndEndDates(clientDetails, currentStateDetails, encounter);
assertEquals(startDate, currentStateDetails.getStartDate());
assertEquals(endDate, currentStateDetails.getEndDate());
}
use of ca.uhn.fhir.model.dstu2.resource.Encounter in project synthea by synthetichealth.
the class FhirDstu2 method procedure.
/**
* Map the given Procedure into a FHIR Procedure resource, and add it to the given Bundle.
*
* @param rand
* Source of randomness to use when generating ids etc
* @param personEntry
* The Person entry
* @param bundle
* Bundle to add to
* @param encounterEntry
* The current Encounter entry
* @param procedure
* The Procedure
* @return The added Entry
*/
private static Entry procedure(RandomNumberGenerator rand, Entry personEntry, Bundle bundle, Entry encounterEntry, Procedure procedure) {
ca.uhn.fhir.model.dstu2.resource.Procedure procedureResource = new ca.uhn.fhir.model.dstu2.resource.Procedure();
procedureResource.setStatus(ProcedureStatusEnum.COMPLETED);
procedureResource.setSubject(new ResourceReferenceDt(personEntry.getFullUrl()));
procedureResource.setEncounter(new ResourceReferenceDt(encounterEntry.getFullUrl()));
Code code = procedure.codes.get(0);
procedureResource.setCode(mapCodeToCodeableConcept(code, SNOMED_URI));
if (procedure.stop != 0L) {
Date startDate = new Date(procedure.start);
Date endDate = new Date(procedure.stop);
procedureResource.setPerformed(new PeriodDt().setStart(new DateTimeDt(startDate)).setEnd(new DateTimeDt(endDate)));
} else {
procedureResource.setPerformed(convertFhirDateTime(procedure.start, true));
}
if (!procedure.reasons.isEmpty()) {
// Only one element in list
Code reason = procedure.reasons.get(0);
for (Entry entry : bundle.getEntry()) {
if (entry.getResource().getResourceName().equals("Condition")) {
Condition condition = (Condition) entry.getResource();
// Only one element in list
CodingDt coding = condition.getCode().getCoding().get(0);
if (reason.code.equals(coding.getCode())) {
procedureResource.setReason(new ResourceReferenceDt(entry.getFullUrl()));
}
}
}
}
Entry procedureEntry = newEntry(rand, bundle, procedureResource);
procedure.fullUrl = procedureEntry.getFullUrl();
return procedureEntry;
}
use of ca.uhn.fhir.model.dstu2.resource.Encounter in project synthea by synthetichealth.
the class FhirDstu2 method medicationClaim.
/**
* Create an entry for the given Claim, which references a Medication.
*
* @param rand
* Source of randomness to use when generating ids etc
* @param personEntry
* Entry for the person
* @param bundle
* The Bundle to add to
* @param encounterEntry
* The current Encounter
* @param claim
* the Claim object
* @param medicationEntry
* The Entry for the Medication object, previously created
* @return the added Entry
*/
private static Entry medicationClaim(RandomNumberGenerator rand, Entry personEntry, Bundle bundle, Entry encounterEntry, Claim claim, Entry medicationEntry) {
ca.uhn.fhir.model.dstu2.resource.Claim claimResource = new ca.uhn.fhir.model.dstu2.resource.Claim();
ca.uhn.fhir.model.dstu2.resource.Encounter encounterResource = (ca.uhn.fhir.model.dstu2.resource.Encounter) encounterEntry.getResource();
// assume institutional claim
// TODO review claim type
claimResource.setType(ClaimTypeEnum.INSTITUTIONAL);
claimResource.setUse(UseEnum.COMPLETE);
claimResource.setPatient(new ResourceReferenceDt(personEntry.getFullUrl()));
claimResource.setOrganization(encounterResource.getServiceProvider());
// add prescription.
claimResource.setPrescription(new ResourceReferenceDt(medicationEntry.getFullUrl()));
return newEntry(rand, bundle, claimResource);
}
use of ca.uhn.fhir.model.dstu2.resource.Encounter in project synthea by synthetichealth.
the class FhirDstu2 method convertToFHIR.
/**
* Convert the given Person into a FHIR Bundle with the Patient and the
* associated entries from their health record.
*
* @param person Person to generate the FHIR Bundle
* @param stopTime Time the simulation ended
* @return String containing a FHIR Bundle containing the Person's health record
*/
public static Bundle convertToFHIR(Person person, long stopTime) {
Bundle bundle = new Bundle();
if (TRANSACTION_BUNDLE) {
bundle.setType(BundleTypeEnum.TRANSACTION);
} else {
bundle.setType(BundleTypeEnum.COLLECTION);
}
Entry personEntry = basicInfo(person, bundle, stopTime);
for (Encounter encounter : person.record.encounters) {
Entry encounterEntry = encounter(person, personEntry, bundle, encounter);
for (HealthRecord.Entry condition : encounter.conditions) {
condition(person, personEntry, bundle, encounterEntry, condition);
}
for (HealthRecord.Entry allergy : encounter.allergies) {
allergy(person, personEntry, bundle, encounterEntry, allergy);
}
for (Observation observation : encounter.observations) {
// Observation resources in stu3 don't support Attachments
if (observation.value instanceof Attachment) {
media(person, personEntry, bundle, encounterEntry, observation);
} else {
observation(person, personEntry, bundle, encounterEntry, observation);
}
}
for (Procedure procedure : encounter.procedures) {
procedure(person, personEntry, bundle, encounterEntry, procedure);
}
for (Medication medication : encounter.medications) {
medication(person, personEntry, bundle, encounterEntry, medication);
}
for (HealthRecord.Entry immunization : encounter.immunizations) {
immunization(person, personEntry, bundle, encounterEntry, immunization);
}
for (Report report : encounter.reports) {
report(person, personEntry, bundle, encounterEntry, report);
}
for (CarePlan careplan : encounter.careplans) {
careplan(person, personEntry, bundle, encounterEntry, careplan);
}
for (ImagingStudy imagingStudy : encounter.imagingStudies) {
imagingStudy(person, personEntry, bundle, encounterEntry, imagingStudy);
}
for (HealthRecord.Device device : encounter.devices) {
device(person, personEntry, bundle, device);
}
for (HealthRecord.Supply supply : encounter.supplies) {
supplyDelivery(person, personEntry, bundle, supply, encounter);
}
// one claim per encounter
encounterClaim(person, personEntry, bundle, encounterEntry, encounter.claim);
}
return bundle;
}
use of ca.uhn.fhir.model.dstu2.resource.Encounter in project synthea by synthetichealth.
the class FhirDstu2 method medicationAdministration.
/**
* Add a MedicationAdministration if needed for the given medication.
*
* @param rand Source of randomness to use when generating ids etc
* @param personEntry The Entry for the Person
* @param bundle Bundle to add the MedicationAdministration to
* @param encounterEntry Current Encounter entry
* @param medication The Medication
* @return The added Entry
*/
private static Entry medicationAdministration(RandomNumberGenerator rand, Entry personEntry, Bundle bundle, Entry encounterEntry, Medication medication) {
MedicationAdministration medicationResource = new MedicationAdministration();
medicationResource.setPatient(new ResourceReferenceDt(personEntry.getFullUrl()));
medicationResource.setEncounter(new ResourceReferenceDt(encounterEntry.getFullUrl()));
Code code = medication.codes.get(0);
String system = code.system.equals("SNOMED-CT") ? SNOMED_URI : RXNORM_URI;
medicationResource.setMedication(mapCodeToCodeableConcept(code, system));
medicationResource.setEffectiveTime(new DateTimeDt(new Date(medication.start)));
medicationResource.setStatus(MedicationAdministrationStatusEnum.COMPLETED);
if (medication.prescriptionDetails != null) {
JsonObject rxInfo = medication.prescriptionDetails;
MedicationAdministration.Dosage dosage = new MedicationAdministration.Dosage();
// as_needed is true if present
if ((rxInfo.has("dosage")) && (!rxInfo.has("as_needed"))) {
SimpleQuantityDt dose = new SimpleQuantityDt();
dose.setValue(rxInfo.get("dosage").getAsJsonObject().get("amount").getAsDouble());
dosage.setQuantity(dose);
if (rxInfo.has("instructions")) {
for (JsonElement instructionElement : rxInfo.get("instructions").getAsJsonArray()) {
JsonObject instruction = instructionElement.getAsJsonObject();
dosage.setText(instruction.get("display").getAsString());
}
}
}
medicationResource.setDosage(dosage);
}
if (!medication.reasons.isEmpty()) {
// Only one element in list
Code reason = medication.reasons.get(0);
for (Entry entry : bundle.getEntry()) {
if (entry.getResource().getResourceName().equals("Condition")) {
Condition condition = (Condition) entry.getResource();
// Only one element in list
CodeableConceptDt coding = condition.getCode();
if (reason.code.equals(coding.getCodingFirstRep().getCode())) {
medicationResource.addReasonGiven(coding);
}
}
}
}
Entry medicationAdminEntry = newEntry(rand, bundle, medicationResource);
return medicationAdminEntry;
}
Aggregations