Search in sources :

Example 26 with ListResource

use of org.hl7.fhir.r5.model.ListResource in project nia-patient-switching-standard-adaptor by NHSDigital.

the class EncounterMapper method generateLinkSetTopicLists.

private void generateLinkSetTopicLists(RCMRMT030101UK04EhrComposition ehrComposition, ListResource consultation, List<ListResource> topics) {
    var linkSetList = getLinkSets(ehrComposition);
    if (!CollectionUtils.isEmpty(linkSetList)) {
        var linkSetTopic = consultationListMapper.mapToTopic(consultation, null);
        addLinkSetsAsTopicEntries(linkSetList, linkSetTopic);
        consultation.addEntry(new ListEntryComponent(new Reference(linkSetTopic)));
        topics.add(linkSetTopic);
    }
}
Also used : Reference(org.hl7.fhir.dstu3.model.Reference) ListEntryComponent(org.hl7.fhir.dstu3.model.ListResource.ListEntryComponent)

Example 27 with ListResource

use of org.hl7.fhir.r5.model.ListResource in project nia-patient-switching-standard-adaptor by NHSDigital.

the class EncounterMapper method generateCategoryLists.

private void generateCategoryLists(RCMRMT030101UK04CompoundStatement topicCompoundStatement, ListResource topic, List<ListResource> categories) {
    var categoryCompoundStatements = getCategoryCompoundStatements(topicCompoundStatement);
    categoryCompoundStatements.forEach(categoryCompoundStatement -> {
        var category = consultationListMapper.mapToCategory(topic, categoryCompoundStatement);
        List<Reference> entryReferences = new ArrayList<>();
        resourceReferenceUtil.extractChildReferencesFromCompoundStatement(categoryCompoundStatement, entryReferences);
        entryReferences.forEach(reference -> addEntry(category, reference));
        topic.addEntry(new ListEntryComponent(new Reference(category)));
        categories.add(category);
    });
}
Also used : Reference(org.hl7.fhir.dstu3.model.Reference) ArrayList(java.util.ArrayList) ListEntryComponent(org.hl7.fhir.dstu3.model.ListResource.ListEntryComponent)

Example 28 with ListResource

use of org.hl7.fhir.r5.model.ListResource in project nia-patient-switching-standard-adaptor by NHSDigital.

the class EncounterMapperTest method getList.

private ListResource getList() {
    ListResource listResource = new ListResource();
    listResource.setEncounter(new Reference(ENCOUNTER_ID));
    listResource.getEntry().add(new ListResource.ListEntryComponent().setItem(new Reference(ENCOUNTER_ID)));
    listResource.getEntry().add(new ListResource.ListEntryComponent().setItem(new Reference(ENCOUNTER_ID_2)));
    return listResource;
}
Also used : Reference(org.hl7.fhir.dstu3.model.Reference) ListResource(org.hl7.fhir.dstu3.model.ListResource)

Example 29 with ListResource

use of org.hl7.fhir.r5.model.ListResource in project gpconnect-demonstrator by nhsconnect.

the class WarningCodeExtHelper method addWarningCodeExtensions.

/**
 * confidential items are per record but the other two are global values per
 * patient
 *
 * @param warningCodes
 * @param list
 * @param patientRepository
 * @param medicationStatementRepository
 * @param structuredAllergySearch
 */
public static void addWarningCodeExtensions(Set<String> warningCodes, ListResource list, PatientRepository patientRepository, MedicationStatementRepository medicationStatementRepository, StructuredAllergySearch structuredAllergySearch) {
    String NHS = list.getSubject().getIdentifier().getValue();
    PatientEntity patientEntity = patientRepository.findByNhsNumber(NHS);
    List<MedicationStatementEntity> medicationStatements = medicationStatementRepository.findByPatientId(patientEntity.getId());
    for (MedicationStatementEntity medicationStatement : medicationStatements) {
        setFlags(medicationStatement.getWarningCode());
    }
    List<StructuredAllergyIntoleranceEntity> allergies = structuredAllergySearch.getAllergyIntollerence(NHS);
    for (StructuredAllergyIntoleranceEntity allergy : allergies) {
        setFlags(allergy.getWarningCode());
    }
    // check medication_statements for either of the global flags
    if (dataInTransit) {
        warningCodes.add(DATA_IN_TRANSIT);
    }
    if (dataAwaitingFiling) {
        warningCodes.add(DATA_AWAITING_FILING);
    }
    StringBuilder sb = new StringBuilder();
    warningCodes.forEach(warningCode -> {
        if (warningCode != null) {
            String warningCodeDisplay = "";
            Annotation annotation = new Annotation();
            switch(warningCode) {
                case CONFIDENTIAL_ITEMS:
                    warningCodeDisplay = "Confidential Items";
                    // #266
                    annotation.setText(CONFIDENTIAL_ITEMS_NOTE);
                    // list.addNote(annotation);
                    sb.append("\r\n").append(annotation.getText());
                    break;
                case DATA_IN_TRANSIT:
                    warningCodeDisplay = "Data in Transit";
                    Calendar cal = new GregorianCalendar();
                    Date now = new Date();
                    cal.setTime(now);
                    // a week before now
                    cal.add(Calendar.DAY_OF_YEAR, -7);
                    // #266
                    annotation.setText(String.format(DATA_IN_TRANSIT_NOTE, DATE_FORMAT.format(cal.getTime())));
                    // list.addNote(annotation);
                    sb.append("\r\n").append(annotation.getText());
                    break;
                case DATA_AWAITING_FILING:
                    warningCodeDisplay = "Data Awaiting Filing";
                    // #266
                    annotation.setText(DATA_AWAITING_FILING_NOTE);
                    // list.addNote(annotation);
                    sb.append("\r\n").append(annotation.getText());
                    break;
                default:
                    break;
            }
            // #182
            Extension warningExt = new Extension(SystemURL.WARNING_CODE, new CodeType(warningCode));
            list.addExtension(warningExt);
        }
    });
    // cardinality of note 0..1 #266
    if (sb.length() > 0) {
        Annotation annotation = null;
        if (list.getNote().size() > 0) {
            annotation = list.getNote().get(0);
            annotation.setText(annotation.getText());
            annotation.setText(annotation.getText() + sb.toString());
        } else {
            annotation = new Annotation();
            list.addNote(annotation);
            annotation.setText(sb.toString().replaceFirst("^\r\n", ""));
        }
    }
}
Also used : StructuredAllergyIntoleranceEntity(uk.gov.hscic.patient.structuredAllergyIntolerance.StructuredAllergyIntoleranceEntity) GregorianCalendar(java.util.GregorianCalendar) Calendar(java.util.Calendar) GregorianCalendar(java.util.GregorianCalendar) Annotation(org.hl7.fhir.dstu3.model.Annotation) Date(java.util.Date) PatientEntity(uk.gov.hscic.patient.details.PatientEntity) MedicationStatementEntity(uk.gov.hscic.medication.statement.MedicationStatementEntity) Extension(org.hl7.fhir.dstu3.model.Extension) CodeType(org.hl7.fhir.dstu3.model.CodeType)

Example 30 with ListResource

use of org.hl7.fhir.r5.model.ListResource in project MobileAccessGateway by i4mi.

the class Iti66ResponseConverter method translateToFhir.

/**
 * convert ITI-18 query response to ITI-66 response bundle
 */
@Override
public List<ListResource> translateToFhir(QueryResponse input, Map<String, Object> parameters) {
    ArrayList<ListResource> list = new ArrayList<ListResource>();
    if (input != null && Status.SUCCESS.equals(input.getStatus())) {
        Map<String, ListResource> targetList = new HashMap<String, ListResource>();
        if (input.getSubmissionSets() != null) {
            for (SubmissionSet submissionSet : input.getSubmissionSets()) {
                ListResource documentManifest = new ListResource();
                documentManifest.setId(noUuidPrefix(submissionSet.getEntryUuid()));
                documentManifest.setCode(new CodeableConcept(new Coding("http://profiles.ihe.net/ITI/MHD/CodeSystem/MHDlistTypes", "submissionset", "Submission Set")));
                targetList.put(documentManifest.getId(), documentManifest);
                list.add(documentManifest);
                // limitedMetadata -> meta.profile canonical [0..*]
                if (submissionSet.isLimitedMetadata()) {
                    documentManifest.getMeta().addProfile("http://profiles.ihe.net/ITI/MHD/StructureDefinition/IHE.MHD.Minimal.SubmissionSet");
                } else {
                    documentManifest.getMeta().addProfile("http://profiles.ihe.net/ITI/MHD/StructureDefinition/IHE.MHD.Comprehensive.SubmissionSet");
                }
                // comment -> text Narrative [0..1]
                LocalizedString comments = submissionSet.getComments();
                if (comments != null) {
                    documentManifest.addNote().setText(comments.getValue());
                }
                // uniqueId -> masterIdentifier Identifier [0..1] [1..1]
                if (submissionSet.getUniqueId() != null) {
                    documentManifest.addIdentifier((new Identifier().setUse(IdentifierUse.USUAL).setSystem("urn:ietf:rfc:3986").setValue("urn:oid:" + submissionSet.getUniqueId())));
                }
                // entryUUID -> identifier Identifier [0..*]
                if (submissionSet.getEntryUuid() != null) {
                    documentManifest.addIdentifier((new Identifier().setUse(IdentifierUse.OFFICIAL).setSystem("urn:ietf:rfc:3986").setValue(asUuid(submissionSet.getEntryUuid()))));
                }
                // approved -> status=current Other status values are allowed but are not defined in this mapping to XDS.
                if (AvailabilityStatus.APPROVED.equals(submissionSet.getAvailabilityStatus())) {
                    documentManifest.setStatus(ListResource.ListStatus.CURRENT);
                }
                documentManifest.setMode(ListMode.WORKING);
                // contentTypeCode -> type CodeableConcept [0..1]
                if (submissionSet.getContentTypeCode() != null) {
                    documentManifest.addExtension().setUrl("http://profiles.ihe.net/ITI/MHD/StructureDefinition/ihe-designationType").setValue(transform(submissionSet.getContentTypeCode()));
                }
                // patientId -> subject Reference(Patient| Practitioner| Group| Device) [0..1], Reference(Patient)
                if (submissionSet.getPatientId() != null) {
                    Identifiable patient = submissionSet.getPatientId();
                    documentManifest.setSubject(transformPatient(patient));
                }
                // submissionTime -> created dateTime [0..1]
                if (submissionSet.getSubmissionTime() != null) {
                    documentManifest.setDate(Date.from(submissionSet.getSubmissionTime().getDateTime().toInstant()));
                }
                // authorInstitution, authorPerson, authorRole, authorSpeciality, authorTelecommunication -> author Reference(Practitioner| PractitionerRole| Organization| Device| Patient| RelatedPerson) [0..*]
                if (submissionSet.getAuthors() != null) {
                    for (Author author : submissionSet.getAuthors()) {
                        documentManifest.setSource(transformAuthor(author));
                    }
                }
                // intendedRecipient -> recipient Reference(Patient| Practitioner| PractitionerRole| RelatedPerson| Organization) [0..*]
                List<Recipient> recipients = submissionSet.getIntendedRecipients();
                for (Recipient recipient : recipients) {
                    Organization org = recipient.getOrganization();
                    Person person = recipient.getPerson();
                    ContactPoint contact = transform(recipient.getTelecom());
                    var organization = transform(org);
                    Practitioner practitioner = transformPractitioner(person);
                    if (organization != null && practitioner == null) {
                        if (contact != null)
                            organization.addTelecom(contact);
                        documentManifest.addExtension().setUrl("http://profiles.ihe.net/ITI/MHD/StructureDefinition/ihe-intendedRecipient").setValue(new Reference().setResource(organization));
                    } else if (organization != null && practitioner != null) {
                        PractitionerRole role = new PractitionerRole();
                        role.setPractitioner((Reference) new Reference().setResource(practitioner));
                        role.setOrganization((Reference) new Reference().setResource(organization));
                        if (contact != null)
                            role.addTelecom(contact);
                        documentManifest.addExtension().setUrl("http://profiles.ihe.net/ITI/MHD/StructureDefinition/ihe-intendedRecipient").setValue(new Reference().setResource(role));
                    } else if (organization == null && practitioner != null) {
                    // May be a patient, related person or practitioner
                    }
                }
                // sourceId -> source uri [0..1] [1..1]
                if (submissionSet.getSourceId() != null) {
                    documentManifest.addExtension().setUrl("http://profiles.ihe.net/ITI/MHD/StructureDefinition/ihe-sourceId").setValue(new Identifier().setValue("urn:oid:" + submissionSet.getSourceId()));
                }
                // title -> description string [0..1]
                LocalizedString title = submissionSet.getTitle();
                if (title != null) {
                    documentManifest.setTitle(title.getValue());
                }
            }
        }
        if (input.getAssociations() != null) {
            for (Association ass : input.getAssociations()) {
                AssociationType tt = ass.getAssociationType();
                String source = ass.getSourceUuid();
                String target = ass.getTargetUuid();
                if (tt == AssociationType.HAS_MEMBER) {
                    ListResource s = targetList.get(noUuidPrefix(source));
                    if (s != null) {
                        s.addEntry().setItem(new Reference().setReference("DocumentReference/" + noUuidPrefix(target)));
                    }
                }
            }
        }
    } else {
        processError(input);
    }
    return list;
}
Also used : Organization(org.openehealth.ipf.commons.ihe.xds.core.metadata.Organization) HashMap(java.util.HashMap) Reference(org.hl7.fhir.r4.model.Reference) ArrayList(java.util.ArrayList) SubmissionSet(org.openehealth.ipf.commons.ihe.xds.core.metadata.SubmissionSet) Recipient(org.openehealth.ipf.commons.ihe.xds.core.metadata.Recipient) LocalizedString(org.openehealth.ipf.commons.ihe.xds.core.metadata.LocalizedString) PractitionerRole(org.hl7.fhir.r4.model.PractitionerRole) LocalizedString(org.openehealth.ipf.commons.ihe.xds.core.metadata.LocalizedString) Identifiable(org.openehealth.ipf.commons.ihe.xds.core.metadata.Identifiable) Practitioner(org.hl7.fhir.r4.model.Practitioner) ContactPoint(org.hl7.fhir.r4.model.ContactPoint) Identifier(org.hl7.fhir.r4.model.Identifier) Association(org.openehealth.ipf.commons.ihe.xds.core.metadata.Association) AssociationType(org.openehealth.ipf.commons.ihe.xds.core.metadata.AssociationType) Coding(org.hl7.fhir.r4.model.Coding) Author(org.openehealth.ipf.commons.ihe.xds.core.metadata.Author) ListResource(org.hl7.fhir.r4.model.ListResource) Person(org.openehealth.ipf.commons.ihe.xds.core.metadata.Person) CodeableConcept(org.hl7.fhir.r4.model.CodeableConcept)

Aggregations

ListResource (org.hl7.fhir.r5.model.ListResource)12 Element (org.w3c.dom.Element)12 ListResourceEntryComponent (org.hl7.fhir.r5.model.ListResource.ListResourceEntryComponent)11 ListResource (org.hl7.fhir.dstu3.model.ListResource)10 Reference (org.hl7.fhir.dstu3.model.Reference)10 ListEntryComponent (org.hl7.fhir.dstu3.model.ListResource.ListEntryComponent)9 ArrayList (java.util.ArrayList)8 ListResource (org.hl7.fhir.r4.model.ListResource)8 Reference (org.hl7.fhir.r4.model.Reference)6 HashMap (java.util.HashMap)5 XSSFSheet (org.apache.poi.xssf.usermodel.XSSFSheet)5 SectionComponent (org.hl7.fhir.dstu3.model.Composition.SectionComponent)4 Patient (org.hl7.fhir.r4.model.Patient)4 Date (java.util.Date)3 HashSet (java.util.HashSet)3 List (java.util.List)3 File (java.io.File)2 FileOutputStream (java.io.FileOutputStream)2 IOException (java.io.IOException)2 XSSFRow (org.apache.poi.xssf.usermodel.XSSFRow)2