Search in sources :

Example 81 with Encounter

use of org.mitre.synthea.world.concepts.HealthRecord.Encounter in project synthea by synthetichealth.

the class FhirR4 method media.

/**
 * Map the given Observation with attachment element to a FHIR Media resource, and add it to the
 * given Bundle.
 *
 * @param rand           Source of randomness to use when generating ids etc
 * @param personEntry    The Entry for the Person
 * @param bundle         Bundle to add the Media to
 * @param encounterEntry Current Encounter entry
 * @param obs   The Observation to map to FHIR and add to the bundle
 * @return The added Entry
 */
private static BundleEntryComponent media(RandomNumberGenerator rand, BundleEntryComponent personEntry, Bundle bundle, BundleEntryComponent encounterEntry, Observation obs) {
    org.hl7.fhir.r4.model.Media mediaResource = new org.hl7.fhir.r4.model.Media();
    // Hard code as Image since we don't anticipate using video or audio any time soon
    Code mediaType = new Code("http://terminology.hl7.org/CodeSystem/media-type", "image", "Image");
    if (obs.codes != null && obs.codes.size() > 0) {
        List<CodeableConcept> reasonList = obs.codes.stream().map(code -> mapCodeToCodeableConcept(code, SNOMED_URI)).collect(Collectors.toList());
        mediaResource.setReasonCode(reasonList);
    }
    mediaResource.setType(mapCodeToCodeableConcept(mediaType, MEDIA_TYPE_URI));
    mediaResource.setStatus(MediaStatus.COMPLETED);
    mediaResource.setSubject(new Reference(personEntry.getFullUrl()));
    mediaResource.setEncounter(new Reference(encounterEntry.getFullUrl()));
    Attachment content = (Attachment) obs.value;
    org.hl7.fhir.r4.model.Attachment contentResource = new org.hl7.fhir.r4.model.Attachment();
    contentResource.setContentType(content.contentType);
    contentResource.setLanguage(content.language);
    if (content.data != null) {
        contentResource.setDataElement(new org.hl7.fhir.r4.model.Base64BinaryType(content.data));
    } else {
        contentResource.setSize(content.size);
    }
    contentResource.setUrl(content.url);
    contentResource.setTitle(content.title);
    if (content.hash != null) {
        contentResource.setHashElement(new org.hl7.fhir.r4.model.Base64BinaryType(content.hash));
    }
    mediaResource.setWidth(content.width);
    mediaResource.setHeight(content.height);
    mediaResource.setContent(contentResource);
    return newEntry(rand, bundle, mediaResource);
}
Also used : Location(org.mitre.synthea.world.geography.Location) SimpleQuantity(org.hl7.fhir.r4.model.SimpleQuantity) SupplyDeliveryStatus(org.hl7.fhir.r4.model.SupplyDelivery.SupplyDeliveryStatus) Identifier(org.hl7.fhir.r4.model.Identifier) XhtmlNode(org.hl7.fhir.utilities.xhtml.XhtmlNode) HashBasedTable(com.google.common.collect.HashBasedTable) Condition(org.hl7.fhir.r4.model.Condition) CarePlanActivityComponent(org.hl7.fhir.r4.model.CarePlan.CarePlanActivityComponent) Reference(org.hl7.fhir.r4.model.Reference) SupplyDeliverySuppliedItemComponent(org.hl7.fhir.r4.model.SupplyDelivery.SupplyDeliverySuppliedItemComponent) HTTPVerb(org.hl7.fhir.r4.model.Bundle.HTTPVerb) Medication(org.mitre.synthea.world.concepts.HealthRecord.Medication) FhirContext(ca.uhn.fhir.context.FhirContext) Device(org.hl7.fhir.r4.model.Device) Person(org.mitre.synthea.world.agents.Person) ImmunizationStatus(org.hl7.fhir.r4.model.Immunization.ImmunizationStatus) Map(java.util.Map) Encounter(org.mitre.synthea.world.concepts.HealthRecord.Encounter) Coverage(org.hl7.fhir.r4.model.Coverage) IntegerType(org.hl7.fhir.r4.model.IntegerType) Meta(org.hl7.fhir.r4.model.Meta) Practitioner(org.hl7.fhir.r4.model.Practitioner) RandomNumberGenerator(org.mitre.synthea.helpers.RandomNumberGenerator) ProcedureStatus(org.hl7.fhir.r4.model.Procedure.ProcedureStatus) DocumentReference(org.hl7.fhir.r4.model.DocumentReference) CarePlanActivityStatus(org.hl7.fhir.r4.model.CarePlan.CarePlanActivityStatus) Goal(org.hl7.fhir.r4.model.Goal) EncounterHospitalizationComponent(org.hl7.fhir.r4.model.Encounter.EncounterHospitalizationComponent) Period(org.hl7.fhir.r4.model.Period) HealthRecord(org.mitre.synthea.world.concepts.HealthRecord) Provenance(org.hl7.fhir.r4.model.Provenance) ContactPoint(org.hl7.fhir.r4.model.ContactPoint) PractitionerRole(org.hl7.fhir.r4.model.PractitionerRole) Utilities(org.mitre.synthea.helpers.Utilities) BundleEntryRequestComponent(org.hl7.fhir.r4.model.Bundle.BundleEntryRequestComponent) BooleanType(org.hl7.fhir.r4.model.BooleanType) ObservationComponentComponent(org.hl7.fhir.r4.model.Observation.ObservationComponentComponent) Coding(org.hl7.fhir.r4.model.Coding) EncounterStatus(org.hl7.fhir.r4.model.Encounter.EncounterStatus) ImagingStudySeriesInstanceComponent(org.hl7.fhir.r4.model.ImagingStudy.ImagingStudySeriesInstanceComponent) BundleType(org.hl7.fhir.r4.model.Bundle.BundleType) EncounterType(org.mitre.synthea.world.concepts.HealthRecord.EncounterType) DeviceNameType(org.hl7.fhir.r4.model.Device.DeviceNameType) DateTimeType(org.hl7.fhir.r4.model.DateTimeType) AllergyIntoleranceType(org.hl7.fhir.r4.model.AllergyIntolerance.AllergyIntoleranceType) DocumentReferenceContextComponent(org.hl7.fhir.r4.model.DocumentReference.DocumentReferenceContextComponent) Use(org.hl7.fhir.r4.model.ExplanationOfBenefit.Use) DiagnosticReport(org.hl7.fhir.r4.model.DiagnosticReport) DosageDoseAndRateComponent(org.hl7.fhir.r4.model.Dosage.DosageDoseAndRateComponent) ProvenanceAgentComponent(org.hl7.fhir.r4.model.Provenance.ProvenanceAgentComponent) Money(org.hl7.fhir.r4.model.Money) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) Calendar(java.util.Calendar) ContactPointUse(org.hl7.fhir.r4.model.ContactPoint.ContactPointUse) LocationPhysicalType(org.hl7.fhir.r4.model.codesystems.LocationPhysicalType) DiagnosisComponent(org.hl7.fhir.r4.model.Claim.DiagnosisComponent) Quantity(org.hl7.fhir.r4.model.Quantity) DecimalType(org.hl7.fhir.r4.model.DecimalType) Procedure(org.mitre.synthea.world.concepts.HealthRecord.Procedure) ImagingStudySeriesComponent(org.hl7.fhir.r4.model.ImagingStudy.ImagingStudySeriesComponent) ImagingStudy(org.mitre.synthea.world.concepts.HealthRecord.ImagingStudy) IOException(java.io.IOException) NarrativeStatus(org.hl7.fhir.r4.model.Narrative.NarrativeStatus) FHIRDeviceStatus(org.hl7.fhir.r4.model.Device.FHIRDeviceStatus) Claim(org.mitre.synthea.world.concepts.Claim) ExplanationOfBenefit(org.hl7.fhir.r4.model.ExplanationOfBenefit) Bundle(org.hl7.fhir.r4.model.Bundle) CodeType(org.hl7.fhir.r4.model.CodeType) CarePlanIntent(org.hl7.fhir.r4.model.CarePlan.CarePlanIntent) DocumentReferenceStatus(org.hl7.fhir.r4.model.Enumerations.DocumentReferenceStatus) LocationStatus(org.hl7.fhir.r4.model.Location.LocationStatus) TotalComponent(org.hl7.fhir.r4.model.ExplanationOfBenefit.TotalComponent) ContactComponent(org.hl7.fhir.r4.model.Patient.ContactComponent) JsonObject(com.google.gson.JsonObject) Attachment(org.mitre.synthea.engine.Components.Attachment) NodeType(org.hl7.fhir.utilities.xhtml.NodeType) Point2D(java.awt.geom.Point2D) Date(java.util.Date) CoverageStatus(org.hl7.fhir.r4.model.Coverage.CoverageStatus) Costs(org.mitre.synthea.world.concepts.Costs) AllergyIntolerance(org.hl7.fhir.r4.model.AllergyIntolerance) LocationPositionComponent(org.hl7.fhir.r4.model.Location.LocationPositionComponent) ContactPointSystem(org.hl7.fhir.r4.model.ContactPoint.ContactPointSystem) HumanName(org.hl7.fhir.r4.model.HumanName) Gson(com.google.gson.Gson) StringType(org.hl7.fhir.r4.model.StringType) BundleEntryComponent(org.hl7.fhir.r4.model.Bundle.BundleEntryComponent) Components(org.mitre.synthea.engine.Components) Patient(org.hl7.fhir.r4.model.Patient) Timing(org.hl7.fhir.r4.model.Timing) GoalLifecycleStatus(org.hl7.fhir.r4.model.Goal.GoalLifecycleStatus) DateType(org.hl7.fhir.r4.model.DateType) CarePlanStatus(org.hl7.fhir.r4.model.CarePlan.CarePlanStatus) SupplyDelivery(org.hl7.fhir.r4.model.SupplyDelivery) Report(org.mitre.synthea.world.concepts.HealthRecord.Report) CareTeamStatus(org.hl7.fhir.r4.model.CareTeam.CareTeamStatus) MedicationAdministration(org.hl7.fhir.r4.model.MedicationAdministration) Resource(org.hl7.fhir.r4.model.Resource) MedicationRequestStatus(org.hl7.fhir.r4.model.MedicationRequest.MedicationRequestStatus) Collectors(java.util.stream.Collectors) SupportingInformationComponent(org.hl7.fhir.r4.model.Claim.SupportingInformationComponent) CarePlanActivityDetailComponent(org.hl7.fhir.r4.model.CarePlan.CarePlanActivityDetailComponent) InsuranceComponent(org.hl7.fhir.r4.model.Claim.InsuranceComponent) ProcedureComponent(org.hl7.fhir.r4.model.Claim.ProcedureComponent) Narrative(org.hl7.fhir.r4.model.Narrative) List(java.util.List) Immunization(org.hl7.fhir.r4.model.Immunization) Extension(org.hl7.fhir.r4.model.Extension) PositiveIntType(org.hl7.fhir.r4.model.PositiveIntType) ClaimStatus(org.hl7.fhir.r4.model.Claim.ClaimStatus) MedicationRequest(org.hl7.fhir.r4.model.MedicationRequest) SimpleCSV(org.mitre.synthea.helpers.SimpleCSV) Property(org.hl7.fhir.r4.model.Property) TimingRepeatComponent(org.hl7.fhir.r4.model.Timing.TimingRepeatComponent) Type(org.hl7.fhir.r4.model.Type) Clinician(org.mitre.synthea.world.agents.Clinician) AllergyIntoleranceCategory(org.hl7.fhir.r4.model.AllergyIntolerance.AllergyIntoleranceCategory) CodeableConcept(org.hl7.fhir.r4.model.CodeableConcept) HashMap(java.util.HashMap) AllergyIntoleranceCriticality(org.hl7.fhir.r4.model.AllergyIntolerance.AllergyIntoleranceCriticality) Dosage(org.hl7.fhir.r4.model.Dosage) CareTeam(org.hl7.fhir.r4.model.CareTeam) JsonElement(com.google.gson.JsonElement) Address(org.hl7.fhir.r4.model.Address) Code(org.mitre.synthea.world.concepts.HealthRecord.Code) CarePlan(org.mitre.synthea.world.concepts.HealthRecord.CarePlan) ItemComponent(org.hl7.fhir.r4.model.Claim.ItemComponent) PatientCommunicationComponent(org.hl7.fhir.r4.model.Patient.PatientCommunicationComponent) ImagingStudyStatus(org.hl7.fhir.r4.model.ImagingStudy.ImagingStudyStatus) ServiceRequest(org.hl7.fhir.r4.model.ServiceRequest) UnitsOfTime(org.hl7.fhir.r4.model.Timing.UnitsOfTime) ObservationStatus(org.hl7.fhir.r4.model.Observation.ObservationStatus) Config(org.mitre.synthea.helpers.Config) DoseRateType(org.hl7.fhir.r4.model.codesystems.DoseRateType) MedicationRequestIntent(org.hl7.fhir.r4.model.MedicationRequest.MedicationRequestIntent) MedicationStatus(org.hl7.fhir.r4.model.Medication.MedicationStatus) MedicationAdministrationDosageComponent(org.hl7.fhir.r4.model.MedicationAdministration.MedicationAdministrationDosageComponent) Payer(org.mitre.synthea.world.agents.Payer) MediaStatus(org.hl7.fhir.r4.model.Media.MediaStatus) Provider(org.mitre.synthea.world.agents.Provider) CareTeamParticipantComponent(org.hl7.fhir.r4.model.CareTeam.CareTeamParticipantComponent) Organization(org.hl7.fhir.r4.model.Organization) AdministrativeGender(org.hl7.fhir.r4.model.Enumerations.AdministrativeGender) RemittanceOutcome(org.hl7.fhir.r4.model.ExplanationOfBenefit.RemittanceOutcome) Observation(org.mitre.synthea.world.concepts.HealthRecord.Observation) IdentifierUse(org.hl7.fhir.r4.model.Identifier.IdentifierUse) DiagnosticReportStatus(org.hl7.fhir.r4.model.DiagnosticReport.DiagnosticReportStatus) Table(com.google.common.collect.Table) Reference(org.hl7.fhir.r4.model.Reference) DocumentReference(org.hl7.fhir.r4.model.DocumentReference) Attachment(org.mitre.synthea.engine.Components.Attachment) Code(org.mitre.synthea.world.concepts.HealthRecord.Code) CodeableConcept(org.hl7.fhir.r4.model.CodeableConcept)

Example 82 with Encounter

use of org.mitre.synthea.world.concepts.HealthRecord.Encounter in project synthea by synthetichealth.

the class FhirR4 method clinicalNote.

/**
 * Add a clinical note to the Bundle, which adds both a DocumentReference and a
 * DiagnosticReport.
 *
 * @param rand           Source of randomness to use when generating ids etc
 * @param personEntry    The Entry for the Person
 * @param bundle         Bundle to add the Report to
 * @param encounterEntry Current Encounter entry
 * @param clinicalNoteText The plain text contents of the note.
 * @param currentNote If this is the most current note.
 * @return The entry for the DocumentReference.
 */
private static BundleEntryComponent clinicalNote(RandomNumberGenerator rand, BundleEntryComponent personEntry, Bundle bundle, BundleEntryComponent encounterEntry, String clinicalNoteText, boolean currentNote) {
    // We'll need the encounter...
    org.hl7.fhir.r4.model.Encounter encounter = (org.hl7.fhir.r4.model.Encounter) encounterEntry.getResource();
    // Add a DiagnosticReport
    DiagnosticReport reportResource = new DiagnosticReport();
    if (USE_US_CORE_IG) {
        Meta meta = new Meta();
        meta.addProfile("http://hl7.org/fhir/us/core/StructureDefinition/us-core-diagnosticreport-note");
        reportResource.setMeta(meta);
    }
    reportResource.setStatus(DiagnosticReportStatus.FINAL);
    reportResource.addCategory(new CodeableConcept(new Coding(LOINC_URI, "34117-2", "History and physical note")));
    reportResource.getCategoryFirstRep().addCoding(new Coding(LOINC_URI, "51847-2", "Evaluation+Plan note"));
    reportResource.setCode(reportResource.getCategoryFirstRep());
    reportResource.setSubject(new Reference(personEntry.getFullUrl()));
    reportResource.setEncounter(new Reference(encounterEntry.getFullUrl()));
    reportResource.setEffective(encounter.getPeriod().getStartElement());
    reportResource.setIssued(encounter.getPeriod().getStart());
    if (encounter.hasParticipant()) {
        reportResource.addPerformer(encounter.getParticipantFirstRep().getIndividual());
    } else {
        reportResource.addPerformer(encounter.getServiceProvider());
    }
    reportResource.addPresentedForm().setContentType("text/plain; charset=utf-8").setData(clinicalNoteText.getBytes(java.nio.charset.StandardCharsets.UTF_8));
    newEntry(rand, bundle, reportResource);
    // Add a DocumentReference
    DocumentReference documentReference = new DocumentReference();
    if (USE_US_CORE_IG) {
        Meta meta = new Meta();
        meta.addProfile("http://hl7.org/fhir/us/core/StructureDefinition/us-core-documentreference");
        documentReference.setMeta(meta);
    }
    if (currentNote) {
        documentReference.setStatus(DocumentReferenceStatus.CURRENT);
    } else {
        documentReference.setStatus(DocumentReferenceStatus.SUPERSEDED);
    }
    documentReference.addIdentifier().setSystem("urn:ietf:rfc:3986").setValue("urn:uuid:" + reportResource.getId());
    documentReference.setType(reportResource.getCategoryFirstRep());
    documentReference.addCategory(new CodeableConcept(new Coding("http://hl7.org/fhir/us/core/CodeSystem/us-core-documentreference-category", "clinical-note", "Clinical Note")));
    documentReference.setSubject(new Reference(personEntry.getFullUrl()));
    documentReference.setDate(encounter.getPeriod().getStart());
    documentReference.addAuthor(reportResource.getPerformerFirstRep());
    documentReference.setCustodian(encounter.getServiceProvider());
    documentReference.addContent().setAttachment(reportResource.getPresentedFormFirstRep()).setFormat(new Coding("http://ihe.net/fhir/ValueSet/IHE.FormatCode.codesystem", "urn:ihe:iti:xds:2017:mimeTypeSufficient", "mimeType Sufficient"));
    documentReference.setContext(new DocumentReferenceContextComponent().addEncounter(reportResource.getEncounter()).setPeriod(encounter.getPeriod()));
    return newEntry(rand, bundle, documentReference);
}
Also used : Meta(org.hl7.fhir.r4.model.Meta) DocumentReferenceContextComponent(org.hl7.fhir.r4.model.DocumentReference.DocumentReferenceContextComponent) Reference(org.hl7.fhir.r4.model.Reference) DocumentReference(org.hl7.fhir.r4.model.DocumentReference) DiagnosticReport(org.hl7.fhir.r4.model.DiagnosticReport) Coding(org.hl7.fhir.r4.model.Coding) Encounter(org.mitre.synthea.world.concepts.HealthRecord.Encounter) DocumentReference(org.hl7.fhir.r4.model.DocumentReference) CodeableConcept(org.hl7.fhir.r4.model.CodeableConcept)

Example 83 with Encounter

use of org.mitre.synthea.world.concepts.HealthRecord.Encounter in project synthea by synthetichealth.

the class FhirStu3 method encounter.

/**
 * Map the given Encounter into a FHIR Encounter resource, and add it to the given Bundle.
 *
 * @param personEntry Entry for the Person
 * @param bundle The Bundle to add to
 * @param encounter The current Encounter
 * @return The added Entry
 */
private static BundleEntryComponent encounter(Person person, BundleEntryComponent personEntry, Bundle bundle, Encounter encounter) {
    org.hl7.fhir.dstu3.model.Encounter encounterResource = new org.hl7.fhir.dstu3.model.Encounter();
    encounterResource.setSubject(new Reference(personEntry.getFullUrl()));
    encounterResource.setStatus(EncounterStatus.FINISHED);
    if (encounter.codes.isEmpty()) {
        // wellness encounter
        encounterResource.addType().addCoding().setCode("185349003").setDisplay("Encounter for check up").setSystem(SNOMED_URI);
    } else {
        Code code = encounter.codes.get(0);
        encounterResource.addType(mapCodeToCodeableConcept(code, SNOMED_URI));
    }
    Coding classCode = new Coding();
    classCode.setCode(EncounterType.fromString(encounter.type).code());
    classCode.setSystem("http://terminology.hl7.org/CodeSystem/v3-ActCode");
    encounterResource.setClass_(classCode);
    encounterResource.setPeriod(new Period().setStart(new Date(encounter.start)).setEnd(new Date(encounter.stop)));
    if (encounter.reason != null) {
        encounterResource.addReason().addCoding().setCode(encounter.reason.code).setDisplay(encounter.reason.display).setSystem(SNOMED_URI);
    }
    Provider provider = encounter.provider;
    if (provider == null) {
        // no associated provider, patient goes to wellness provider
        provider = person.getProvider(EncounterType.WELLNESS, encounter.start);
    }
    if (TRANSACTION_BUNDLE) {
        encounterResource.setServiceProvider(new Reference(ExportHelper.buildFhirSearchUrl("Organization", provider.getResourceID())));
    } else {
        String providerFullUrl = findProviderUrl(provider, bundle);
        if (providerFullUrl != null) {
            encounterResource.setServiceProvider(new Reference(providerFullUrl));
        } else {
            BundleEntryComponent providerOrganization = provider(bundle, provider);
            encounterResource.setServiceProvider(new Reference(providerOrganization.getFullUrl()));
        }
    }
    encounterResource.getServiceProvider().setDisplay(provider.name);
    if (encounter.clinician != null) {
        if (TRANSACTION_BUNDLE) {
            encounterResource.addParticipant().setIndividual(new Reference(ExportHelper.buildFhirNpiSearchUrl(encounter.clinician)));
        } else {
            String practitionerFullUrl = findPractitioner(encounter.clinician, bundle);
            if (practitionerFullUrl != null) {
                encounterResource.addParticipant().setIndividual(new Reference(practitionerFullUrl));
            } else {
                BundleEntryComponent practitioner = practitioner(bundle, encounter.clinician);
                encounterResource.addParticipant().setIndividual(new Reference(practitioner.getFullUrl()));
            }
        }
        encounterResource.getParticipantFirstRep().getIndividual().setDisplay(encounter.clinician.getFullname());
    }
    if (encounter.discharge != null) {
        EncounterHospitalizationComponent hospitalization = new EncounterHospitalizationComponent();
        Code dischargeDisposition = new Code(DISCHARGE_URI, encounter.discharge.code, encounter.discharge.display);
        hospitalization.setDischargeDisposition(mapCodeToCodeableConcept(dischargeDisposition, DISCHARGE_URI));
        encounterResource.setHospitalization(hospitalization);
    }
    if (USE_SHR_EXTENSIONS) {
        encounterResource.setMeta(new Meta().addProfile(SHR_EXT + "shr-encounter-EncounterPerformed"));
        // required fields for this profile are status & action-PerformedContext-extension
        Extension performedContext = new Extension();
        performedContext.setUrl(SHR_EXT + "shr-action-PerformedContext-extension");
        performedContext.addExtension(SHR_EXT + "shr-action-Status-extension", new CodeType("finished"));
        encounterResource.addExtension(performedContext);
    }
    return newEntry(person, bundle, encounterResource);
}
Also used : Meta(org.hl7.fhir.dstu3.model.Meta) Reference(org.hl7.fhir.dstu3.model.Reference) Period(org.hl7.fhir.dstu3.model.Period) EncounterHospitalizationComponent(org.hl7.fhir.dstu3.model.Encounter.EncounterHospitalizationComponent) Code(org.mitre.synthea.world.concepts.HealthRecord.Code) Date(java.util.Date) Provider(org.mitre.synthea.world.agents.Provider) Extension(org.hl7.fhir.dstu3.model.Extension) BundleEntryComponent(org.hl7.fhir.dstu3.model.Bundle.BundleEntryComponent) Coding(org.hl7.fhir.dstu3.model.Coding) Encounter(org.mitre.synthea.world.concepts.HealthRecord.Encounter) CodeType(org.hl7.fhir.dstu3.model.CodeType)

Example 84 with Encounter

use of org.mitre.synthea.world.concepts.HealthRecord.Encounter in project synthea by synthetichealth.

the class FhirStu3 method medication.

/**
 * Map the given Medication to a FHIR MedicationRequest resource, and add it to the given Bundle.
 *
 * @param rand Source of randomness to use when generating ids etc
 * @param personEntry The Entry for the Person
 * @param bundle Bundle to add the Medication to
 * @param encounterEntry Current Encounter entry
 * @param medication The Medication
 * @return The added Entry
 */
private static BundleEntryComponent medication(RandomNumberGenerator rand, BundleEntryComponent personEntry, Bundle bundle, BundleEntryComponent encounterEntry, Medication medication) {
    MedicationRequest medicationResource = new MedicationRequest();
    medicationResource.setSubject(new Reference(personEntry.getFullUrl()));
    medicationResource.setContext(new Reference(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.setAuthoredOn(new Date(medication.start));
    medicationResource.setIntent(MedicationRequestIntent.ORDER);
    org.hl7.fhir.dstu3.model.Encounter encounter = (org.hl7.fhir.dstu3.model.Encounter) encounterEntry.getResource();
    MedicationRequestRequesterComponent requester = new MedicationRequestRequesterComponent();
    requester.setAgent(encounter.getParticipantFirstRep().getIndividual());
    requester.setOnBehalfOf(encounter.getServiceProvider());
    medicationResource.setRequester(requester);
    if (medication.stop != 0L) {
        medicationResource.setStatus(MedicationRequestStatus.STOPPED);
    } else {
        medicationResource.setStatus(MedicationRequestStatus.ACTIVE);
    }
    if (!medication.reasons.isEmpty()) {
        // Only one element in list
        Code reason = medication.reasons.get(0);
        for (BundleEntryComponent entry : bundle.getEntry()) {
            if (entry.getResource().fhirType().equals("Condition")) {
                Condition condition = (Condition) entry.getResource();
                // Only one element in list
                Coding coding = condition.getCode().getCoding().get(0);
                if (reason.code.equals(coding.getCode())) {
                    medicationResource.addReasonReference().setReference(entry.getFullUrl());
                }
            }
        }
    }
    if (medication.prescriptionDetails != null) {
        JsonObject rxInfo = medication.prescriptionDetails;
        Dosage dosage = new Dosage();
        dosage.setSequence(1);
        // as_needed is true if present
        dosage.setAsNeeded(new BooleanType(rxInfo.has("as_needed")));
        // as_needed is true if present
        if ((rxInfo.has("dosage")) && (!rxInfo.has("as_needed"))) {
            Timing timing = new Timing();
            TimingRepeatComponent timingRepeatComponent = new TimingRepeatComponent();
            timingRepeatComponent.setFrequency(rxInfo.get("dosage").getAsJsonObject().get("frequency").getAsInt());
            timingRepeatComponent.setPeriod(rxInfo.get("dosage").getAsJsonObject().get("period").getAsDouble());
            timingRepeatComponent.setPeriodUnit(convertUcumCode(rxInfo.get("dosage").getAsJsonObject().get("unit").getAsString()));
            timing.setRepeat(timingRepeatComponent);
            dosage.setTiming(timing);
            Quantity dose = new SimpleQuantity().setValue(rxInfo.get("dosage").getAsJsonObject().get("amount").getAsDouble());
            dosage.setDose(dose);
            if (rxInfo.has("instructions")) {
                for (JsonElement instructionElement : rxInfo.get("instructions").getAsJsonArray()) {
                    JsonObject instruction = instructionElement.getAsJsonObject();
                    Code instructionCode = new Code(SNOMED_URI, instruction.get("code").getAsString(), instruction.get("display").getAsString());
                    dosage.addAdditionalInstruction(mapCodeToCodeableConcept(instructionCode, SNOMED_URI));
                }
            }
        }
        List<Dosage> dosageInstruction = new ArrayList<Dosage>();
        dosageInstruction.add(dosage);
        medicationResource.setDosageInstruction(dosageInstruction);
    }
    if (USE_SHR_EXTENSIONS) {
        medicationResource.addExtension().setUrl(SHR_EXT + "shr-base-ActionCode-extension").setValue(PRESCRIPTION_OF_DRUG_CC);
        medicationResource.setMeta(new Meta().addProfile(SHR_EXT + "shr-medication-MedicationRequested"));
        // required fields for this profile are status, action-RequestedContext-extension,
        // medication[x]subject, authoredOn, requester
        Extension requestedContext = new Extension();
        requestedContext.setUrl(SHR_EXT + "shr-action-RequestedContext-extension");
        requestedContext.addExtension(SHR_EXT + "shr-action-Status-extension", new CodeType("completed"));
        requestedContext.addExtension(SHR_EXT + "shr-action-RequestIntent-extension", new CodeType("original-order"));
        medicationResource.addExtension(requestedContext);
    }
    BundleEntryComponent medicationEntry = newEntry(rand, bundle, medicationResource);
    // create new claim for medication
    medicationClaim(rand, personEntry, bundle, encounterEntry, medication.claim, medicationEntry);
    // Create new administration for medication, if needed
    if (medication.administration) {
        medicationAdministration(rand, personEntry, bundle, encounterEntry, medication, medicationResource);
    }
    return medicationEntry;
}
Also used : Meta(org.hl7.fhir.dstu3.model.Meta) ArrayList(java.util.ArrayList) JsonObject(com.google.gson.JsonObject) Dosage(org.hl7.fhir.dstu3.model.Dosage) Coding(org.hl7.fhir.dstu3.model.Coding) Encounter(org.mitre.synthea.world.concepts.HealthRecord.Encounter) TimingRepeatComponent(org.hl7.fhir.dstu3.model.Timing.TimingRepeatComponent) Condition(org.hl7.fhir.dstu3.model.Condition) MedicationRequest(org.hl7.fhir.dstu3.model.MedicationRequest) MedicationRequestRequesterComponent(org.hl7.fhir.dstu3.model.MedicationRequest.MedicationRequestRequesterComponent) Reference(org.hl7.fhir.dstu3.model.Reference) BooleanType(org.hl7.fhir.dstu3.model.BooleanType) SimpleQuantity(org.hl7.fhir.dstu3.model.SimpleQuantity) SimpleQuantity(org.hl7.fhir.dstu3.model.SimpleQuantity) Quantity(org.hl7.fhir.dstu3.model.Quantity) Code(org.mitre.synthea.world.concepts.HealthRecord.Code) Date(java.util.Date) Extension(org.hl7.fhir.dstu3.model.Extension) BundleEntryComponent(org.hl7.fhir.dstu3.model.Bundle.BundleEntryComponent) JsonElement(com.google.gson.JsonElement) CodeType(org.hl7.fhir.dstu3.model.CodeType) Timing(org.hl7.fhir.dstu3.model.Timing)

Example 85 with Encounter

use of org.mitre.synthea.world.concepts.HealthRecord.Encounter in project synthea by synthetichealth.

the class FhirStu3 method media.

/**
 * Map the given Media element to a FHIR Media resource, and add it to the given Bundle.
 *
 * @param rand Source of randomness to use when generating ids etc
 * @param personEntry    The Entry for the Person
 * @param bundle         Bundle to add the Media to
 * @param encounterEntry Current Encounter entry
 * @param obs   The Observation to map to FHIR and add to the bundle
 * @return The added Entry
 */
private static BundleEntryComponent media(RandomNumberGenerator rand, BundleEntryComponent personEntry, Bundle bundle, BundleEntryComponent encounterEntry, Observation obs) {
    org.hl7.fhir.dstu3.model.Media mediaResource = new org.hl7.fhir.dstu3.model.Media();
    if (obs.codes != null && obs.codes.size() > 0) {
        List<CodeableConcept> reasonList = obs.codes.stream().map(code -> mapCodeToCodeableConcept(code, SNOMED_URI)).collect(Collectors.toList());
        mediaResource.setReasonCode(reasonList);
    }
    // Hard code as an image
    mediaResource.setType(DigitalMediaType.PHOTO);
    mediaResource.setSubject(new Reference(personEntry.getFullUrl()));
    Attachment content = (Attachment) obs.value;
    org.hl7.fhir.dstu3.model.Attachment contentResource = new org.hl7.fhir.dstu3.model.Attachment();
    contentResource.setContentType(content.contentType);
    contentResource.setLanguage(content.language);
    if (content.data != null) {
        contentResource.setDataElement(new org.hl7.fhir.dstu3.model.Base64BinaryType(content.data));
    }
    contentResource.setUrl(content.url);
    contentResource.setSize(content.size);
    contentResource.setTitle(content.title);
    if (content.hash != null) {
        contentResource.setHashElement(new org.hl7.fhir.dstu3.model.Base64BinaryType(content.hash));
    }
    mediaResource.setWidth(content.width);
    mediaResource.setHeight(content.height);
    mediaResource.setContent(contentResource);
    return newEntry(rand, bundle, mediaResource);
}
Also used : MedicationAdministrationDosageComponent(org.hl7.fhir.dstu3.model.MedicationAdministration.MedicationAdministrationDosageComponent) Type(org.hl7.fhir.dstu3.model.Type) MedicationAdministration(org.hl7.fhir.dstu3.model.MedicationAdministration) Identifier(org.hl7.fhir.dstu3.model.Identifier) Coding(org.hl7.fhir.dstu3.model.Coding) XhtmlNode(org.hl7.fhir.utilities.xhtml.XhtmlNode) HashBasedTable(com.google.common.collect.HashBasedTable) CodeableConcept(org.hl7.fhir.dstu3.model.CodeableConcept) GoalStatus(org.hl7.fhir.dstu3.model.Goal.GoalStatus) MedicationAdministrationStatus(org.hl7.fhir.dstu3.model.MedicationAdministration.MedicationAdministrationStatus) Medication(org.mitre.synthea.world.concepts.HealthRecord.Medication) BigDecimal(java.math.BigDecimal) FhirContext(ca.uhn.fhir.context.FhirContext) DiagnosticReport(org.hl7.fhir.dstu3.model.DiagnosticReport) InstanceAvailability(org.hl7.fhir.dstu3.model.ImagingStudy.InstanceAvailability) Person(org.mitre.synthea.world.agents.Person) DigitalMediaType(org.hl7.fhir.dstu3.model.Media.DigitalMediaType) Map(java.util.Map) PatientCommunicationComponent(org.hl7.fhir.dstu3.model.Patient.PatientCommunicationComponent) Encounter(org.mitre.synthea.world.concepts.HealthRecord.Encounter) TimingRepeatComponent(org.hl7.fhir.dstu3.model.Timing.TimingRepeatComponent) Coverage(org.hl7.fhir.dstu3.model.Coverage) RandomNumberGenerator(org.mitre.synthea.helpers.RandomNumberGenerator) ExplanationOfBenefit(org.hl7.fhir.dstu3.model.ExplanationOfBenefit) Reference(org.hl7.fhir.dstu3.model.Reference) HTTPVerb(org.hl7.fhir.dstu3.model.Bundle.HTTPVerb) HealthRecord(org.mitre.synthea.world.concepts.HealthRecord) Utilities(org.mitre.synthea.helpers.Utilities) ImagingStudySeriesInstanceComponent(org.hl7.fhir.dstu3.model.ImagingStudy.ImagingStudySeriesInstanceComponent) ContactPointSystem(org.hl7.fhir.dstu3.model.ContactPoint.ContactPointSystem) EncounterType(org.mitre.synthea.world.concepts.HealthRecord.EncounterType) ConditionClinicalStatus(org.hl7.fhir.dstu3.model.Condition.ConditionClinicalStatus) Device(org.hl7.fhir.dstu3.model.Device) CodeType(org.hl7.fhir.dstu3.model.CodeType) Money(org.hl7.fhir.dstu3.model.Money) ReferralRequest(org.hl7.fhir.dstu3.model.ReferralRequest) IntegerType(org.hl7.fhir.dstu3.model.IntegerType) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) SupplyDeliveryStatus(org.hl7.fhir.dstu3.model.SupplyDelivery.SupplyDeliveryStatus) Calendar(java.util.Calendar) Period(org.hl7.fhir.dstu3.model.Period) PositiveIntType(org.hl7.fhir.dstu3.model.PositiveIntType) EncounterHospitalizationComponent(org.hl7.fhir.dstu3.model.Encounter.EncounterHospitalizationComponent) SupplyDelivery(org.hl7.fhir.dstu3.model.SupplyDelivery) Procedure(org.mitre.synthea.world.concepts.HealthRecord.Procedure) Practitioner(org.hl7.fhir.dstu3.model.Practitioner) SimpleQuantity(org.hl7.fhir.dstu3.model.SimpleQuantity) ImagingStudy(org.mitre.synthea.world.concepts.HealthRecord.ImagingStudy) IOException(java.io.IOException) Dosage(org.hl7.fhir.dstu3.model.Dosage) Claim(org.mitre.synthea.world.concepts.Claim) SpecialConditionComponent(org.hl7.fhir.dstu3.model.Claim.SpecialConditionComponent) Basic(org.hl7.fhir.dstu3.model.Basic) Patient(org.hl7.fhir.dstu3.model.Patient) MedicationRequestIntent(org.hl7.fhir.dstu3.model.MedicationRequest.MedicationRequestIntent) UnitsOfTime(org.hl7.fhir.dstu3.model.Timing.UnitsOfTime) JsonObject(com.google.gson.JsonObject) Attachment(org.mitre.synthea.engine.Components.Attachment) NodeType(org.hl7.fhir.utilities.xhtml.NodeType) Point2D(java.awt.geom.Point2D) Bundle(org.hl7.fhir.dstu3.model.Bundle) Date(java.util.Date) BundleEntryComponent(org.hl7.fhir.dstu3.model.Bundle.BundleEntryComponent) Costs(org.mitre.synthea.world.concepts.Costs) Extension(org.hl7.fhir.dstu3.model.Extension) DiagnosticReportStatus(org.hl7.fhir.dstu3.model.DiagnosticReport.DiagnosticReportStatus) Organization(org.hl7.fhir.dstu3.model.Organization) ImagingStudySeriesComponent(org.hl7.fhir.dstu3.model.ImagingStudy.ImagingStudySeriesComponent) Gson(com.google.gson.Gson) Components(org.mitre.synthea.engine.Components) ObservationComponentComponent(org.hl7.fhir.dstu3.model.Observation.ObservationComponentComponent) StringType(org.hl7.fhir.dstu3.model.StringType) MedicationRequestRequesterComponent(org.hl7.fhir.dstu3.model.MedicationRequest.MedicationRequestRequesterComponent) Address(org.hl7.fhir.dstu3.model.Address) ImmunizationStatus(org.hl7.fhir.dstu3.model.Immunization.ImmunizationStatus) Report(org.mitre.synthea.world.concepts.HealthRecord.Report) CarePlanActivityDetailComponent(org.hl7.fhir.dstu3.model.CarePlan.CarePlanActivityDetailComponent) Collectors(java.util.stream.Collectors) CarePlanStatus(org.hl7.fhir.dstu3.model.CarePlan.CarePlanStatus) Quantity(org.hl7.fhir.dstu3.model.Quantity) ConditionVerificationStatus(org.hl7.fhir.dstu3.model.Condition.ConditionVerificationStatus) AdministrativeGender(org.hl7.fhir.dstu3.model.Enumerations.AdministrativeGender) List(java.util.List) CarePlanActivityStatus(org.hl7.fhir.dstu3.model.CarePlan.CarePlanActivityStatus) ProcedureStatus(org.hl7.fhir.dstu3.model.Procedure.ProcedureStatus) EncounterStatus(org.hl7.fhir.dstu3.model.Encounter.EncounterStatus) AllergyIntoleranceCategory(org.hl7.fhir.dstu3.model.AllergyIntolerance.AllergyIntoleranceCategory) BooleanType(org.hl7.fhir.dstu3.model.BooleanType) ContactPoint(org.hl7.fhir.dstu3.model.ContactPoint) DateType(org.hl7.fhir.dstu3.model.DateType) CarePlanActivityComponent(org.hl7.fhir.dstu3.model.CarePlan.CarePlanActivityComponent) SimpleCSV(org.mitre.synthea.helpers.SimpleCSV) MedicationRequestStatus(org.hl7.fhir.dstu3.model.MedicationRequest.MedicationRequestStatus) MedicationRequest(org.hl7.fhir.dstu3.model.MedicationRequest) Clinician(org.mitre.synthea.world.agents.Clinician) HashMap(java.util.HashMap) ItemComponent(org.hl7.fhir.dstu3.model.Claim.ItemComponent) JsonElement(com.google.gson.JsonElement) Immunization(org.hl7.fhir.dstu3.model.Immunization) Meta(org.hl7.fhir.dstu3.model.Meta) ObservationStatus(org.hl7.fhir.dstu3.model.Observation.ObservationStatus) Code(org.mitre.synthea.world.concepts.HealthRecord.Code) CarePlan(org.mitre.synthea.world.concepts.HealthRecord.CarePlan) SupplyDeliverySuppliedItemComponent(org.hl7.fhir.dstu3.model.SupplyDelivery.SupplyDeliverySuppliedItemComponent) AllergyIntoleranceCriticality(org.hl7.fhir.dstu3.model.AllergyIntolerance.AllergyIntoleranceCriticality) CarePlanIntent(org.hl7.fhir.dstu3.model.CarePlan.CarePlanIntent) ProcedureComponent(org.hl7.fhir.dstu3.model.Claim.ProcedureComponent) FHIRDeviceStatus(org.hl7.fhir.dstu3.model.Device.FHIRDeviceStatus) Config(org.mitre.synthea.helpers.Config) DateTimeType(org.hl7.fhir.dstu3.model.DateTimeType) AllergyIntolerance(org.hl7.fhir.dstu3.model.AllergyIntolerance) Resource(org.hl7.fhir.dstu3.model.Resource) BundleType(org.hl7.fhir.dstu3.model.Bundle.BundleType) BundleEntryRequestComponent(org.hl7.fhir.dstu3.model.Bundle.BundleEntryRequestComponent) Condition(org.hl7.fhir.dstu3.model.Condition) DecimalType(org.hl7.fhir.dstu3.model.DecimalType) Payer(org.mitre.synthea.world.agents.Payer) NarrativeStatus(org.hl7.fhir.dstu3.model.Narrative.NarrativeStatus) ContactComponent(org.hl7.fhir.dstu3.model.Patient.ContactComponent) ClaimStatus(org.hl7.fhir.dstu3.model.Claim.ClaimStatus) Provider(org.mitre.synthea.world.agents.Provider) AllergyIntoleranceVerificationStatus(org.hl7.fhir.dstu3.model.AllergyIntolerance.AllergyIntoleranceVerificationStatus) AllergyIntoleranceClinicalStatus(org.hl7.fhir.dstu3.model.AllergyIntolerance.AllergyIntoleranceClinicalStatus) Observation(org.mitre.synthea.world.concepts.HealthRecord.Observation) Narrative(org.hl7.fhir.dstu3.model.Narrative) AllergyIntoleranceType(org.hl7.fhir.dstu3.model.AllergyIntolerance.AllergyIntoleranceType) ContactPointUse(org.hl7.fhir.dstu3.model.ContactPoint.ContactPointUse) Timing(org.hl7.fhir.dstu3.model.Timing) Table(com.google.common.collect.Table) HumanName(org.hl7.fhir.dstu3.model.HumanName) Property(org.hl7.fhir.dstu3.model.Property) Reference(org.hl7.fhir.dstu3.model.Reference) Attachment(org.mitre.synthea.engine.Components.Attachment) CodeableConcept(org.hl7.fhir.dstu3.model.CodeableConcept)

Aggregations

Encounter (org.mitre.synthea.world.concepts.HealthRecord.Encounter)99 Test (org.junit.Test)54 Code (org.mitre.synthea.world.concepts.HealthRecord.Code)51 HealthRecord (org.mitre.synthea.world.concepts.HealthRecord)29 Person (org.mitre.synthea.world.agents.Person)28 ProviderTest (org.mitre.synthea.world.agents.ProviderTest)22 DeathModule (org.mitre.synthea.modules.DeathModule)17 QualityOfLifeModule (org.mitre.synthea.modules.QualityOfLifeModule)17 ArrayList (java.util.ArrayList)16 CardiovascularDiseaseModule (org.mitre.synthea.modules.CardiovascularDiseaseModule)16 EncounterModule (org.mitre.synthea.modules.EncounterModule)16 LifecycleModule (org.mitre.synthea.modules.LifecycleModule)16 WeightLossModule (org.mitre.synthea.modules.WeightLossModule)16 Provider (org.mitre.synthea.world.agents.Provider)16 Medication (org.mitre.synthea.world.concepts.HealthRecord.Medication)16 Observation (org.mitre.synthea.world.concepts.HealthRecord.Observation)16 Procedure (org.mitre.synthea.world.concepts.HealthRecord.Procedure)16 Report (org.mitre.synthea.world.concepts.HealthRecord.Report)14 Date (java.util.Date)13 Claim (org.mitre.synthea.world.concepts.Claim)12