Search in sources :

Example 1 with OrganizationSDS

use of uk.nhs.adaptors.scr.models.xml.OrganizationSDS in project summary-care-record-api by NHSDigital.

the class ParticipantAgentMapper method setParticipantAgents.

public static void setParticipantAgents(Bundle bundle, Reference individual, Participant participant) {
    var practitionerRole = getResourceByReference(bundle, individual.getReference(), PractitionerRole.class).orElseThrow(() -> new FhirValidationException(String.format("Bundle is missing PractitionerRole %s that is linked to Encounter", individual.getReference())));
    LOGGER.debug("Looking up Practitioner for PractitionerRole.id={}", practitionerRole.getIdElement().getIdPart());
    if (practitionerRole.getPractitioner().isEmpty()) {
        throw new FhirValidationException(String.format("PractitionerRole %s is missing Practitioner reference", practitionerRole.getId()));
    }
    var practitioner = getResourceByReference(bundle, practitionerRole.getPractitioner().getReference(), Practitioner.class).orElseThrow(() -> new FhirValidationException(String.format("Bundle is missing Practitioner %s that is linked to PractitionerRole %s", practitionerRole.getPractitioner().getReference(), practitionerRole.getId())));
    if ("http://fhir.nhs.net/Id/sds-role-profile-id".equals(practitionerRole.getIdentifierFirstRep().getSystem())) {
        Identifier practitionerIdentifier = practitioner.getIdentifierFirstRep();
        if (!USER_SDS_SYSTEM.equals(practitionerIdentifier.getSystem())) {
            throw new FhirValidationException("Invalid practitioner identifier system: " + practitionerIdentifier.getSystem());
        }
        if (!practitionerIdentifier.hasValue()) {
            throw new FhirValidationException("Missing practitioner identifier value");
        }
        var agentPersonSDS = new AgentPersonSDS();
        agentPersonSDS.setIdExtension(practitionerRole.getIdentifierFirstRep().getValue());
        var personSDS = new PersonSDS("agentPersonSDS");
        personSDS.setIdExtension(practitionerIdentifier.getValue());
        personSDS.setName(practitioner.getNameFirstRep().getText());
        agentPersonSDS.setAgentPersonSDS(personSDS);
        participant.setAgentPersonSDS(agentPersonSDS);
    } else if ("https://fhir.nhs.uk/CodeSystem/HL7v3-SDSJobRoleName".equals(practitionerRole.getCodeFirstRep().getCodingFirstRep().getSystem())) {
        var organization = getResourceByReference(bundle, practitionerRole.getOrganization().getReference(), org.hl7.fhir.r4.model.Organization.class).orElseThrow(() -> new FhirValidationException(String.format("Bundle is missing Organization %s that is linked to PractitionerRole %s", practitionerRole.getOrganization().getReference(), practitionerRole.getId())));
        var agentPerson = new AgentPerson();
        agentPerson.setCodeCode(practitionerRole.getCodeFirstRep().getCodingFirstRep().getCode());
        agentPerson.setCodeDisplayName(practitionerRole.getCodeFirstRep().getCodingFirstRep().getDisplay());
        agentPerson.setAddress(organization.getAddressFirstRep().getText());
        agentPerson.setTelecom(organization.getTelecom().stream().map(telecom -> new AgentPerson.Telecom().setUse(AgentPerson.Telecom.mapUse(Optional.ofNullable(telecom.getUse()).orElse(ContactPoint.ContactPointUse.WORK))).setValue(telecom.getValue())).collect(Collectors.toList()));
        var person = new Person("agentPerson");
        person.setName(practitioner.getNameFirstRep().getText());
        agentPerson.setAgentPerson(person);
        Identifier identifier = organization.getIdentifierFirstRep();
        if (organization.getTypeFirstRep().getCodingFirstRep().getCode() != null) {
            var representedOrganization = new Organization("representedOrganization");
            representedOrganization.setIdRoot(identifier.getSystem());
            representedOrganization.setIdExtension(identifier.getValue());
            representedOrganization.setCodeCode(organization.getTypeFirstRep().getCodingFirstRep().getCode());
            representedOrganization.setName(organization.getName());
            agentPerson.setRepresentedOrganization(representedOrganization);
        } else if (organization.hasIdentifier()) {
            var representedOrganizationSDS = new OrganizationSDS("representedOrganizationSDS");
            if (ORG_SDS_SYSTEM.equals(identifier.getSystem())) {
                if (!identifier.hasValue()) {
                    throw new FhirValidationException("Organization.identifier.value element is missing");
                }
                representedOrganizationSDS.setIdRoot("1.2.826.0.1285.0.1.10");
            } else {
                representedOrganizationSDS.setIdRoot("1.2.826.0.1285.0.2.0.109");
            }
            representedOrganizationSDS.setIdExtension(identifier.getValue());
            representedOrganizationSDS.setName(organization.getName());
            agentPerson.setRepresentedOrganizationSDS(representedOrganizationSDS);
        }
        participant.setAgentPerson(agentPerson);
    } else {
        throw new FhirValidationException(String.format("Invalid PractitionerRole %s identifier.system or code.coding.system", practitionerRole.getId()));
    }
}
Also used : AgentPerson(uk.nhs.adaptors.scr.models.xml.AgentPerson) MANUFACTURERNAME(org.hl7.fhir.r4.model.Device.DeviceNameType.MANUFACTURERNAME) Organization(uk.nhs.adaptors.scr.models.xml.Organization) PersonSDS(uk.nhs.adaptors.scr.models.xml.PersonSDS) Identifier(org.hl7.fhir.r4.model.Identifier) DeviceSDS(uk.nhs.adaptors.scr.models.xml.DeviceSDS) NonAgentRole(uk.nhs.adaptors.scr.models.xml.NonAgentRole) CodeableConcept(org.hl7.fhir.r4.model.CodeableConcept) Reference(org.hl7.fhir.r4.model.Reference) StringUtils(org.apache.commons.lang3.StringUtils) StringUtils.isNotEmpty(org.apache.commons.lang3.StringUtils.isNotEmpty) RelatedPerson(org.hl7.fhir.r4.model.RelatedPerson) OTHER(org.hl7.fhir.r4.model.Device.DeviceNameType.OTHER) Person(uk.nhs.adaptors.scr.models.xml.Person) HumanName(org.hl7.fhir.r4.model.HumanName) AgentPersonSDS(uk.nhs.adaptors.scr.models.xml.AgentPersonSDS) Device(uk.nhs.adaptors.scr.models.xml.Device) Practitioner(org.hl7.fhir.r4.model.Practitioner) AgentDevice(uk.nhs.adaptors.scr.models.xml.AgentDevice) DateUtil.formatDateToHl7(uk.nhs.adaptors.scr.utils.DateUtil.formatDateToHl7) AgentPerson(uk.nhs.adaptors.scr.models.xml.AgentPerson) FhirHelper.getDomainResourceList(uk.nhs.adaptors.scr.utils.FhirHelper.getDomainResourceList) FhirValidationException(uk.nhs.adaptors.scr.exceptions.FhirValidationException) FhirHelper.getResourceByReference(uk.nhs.adaptors.scr.utils.FhirHelper.getResourceByReference) ContactPoint(org.hl7.fhir.r4.model.ContactPoint) Collectors(java.util.stream.Collectors) PractitionerRole(org.hl7.fhir.r4.model.PractitionerRole) EncounterParticipantComponent(org.hl7.fhir.r4.model.Encounter.EncounterParticipantComponent) Slf4j(lombok.extern.slf4j.Slf4j) Participant(uk.nhs.adaptors.scr.models.xml.Participant) Coding(org.hl7.fhir.r4.model.Coding) Optional(java.util.Optional) Bundle(org.hl7.fhir.r4.model.Bundle) OrganizationSDS(uk.nhs.adaptors.scr.models.xml.OrganizationSDS) PersonSDS(uk.nhs.adaptors.scr.models.xml.PersonSDS) AgentPersonSDS(uk.nhs.adaptors.scr.models.xml.AgentPersonSDS) Organization(uk.nhs.adaptors.scr.models.xml.Organization) PractitionerRole(org.hl7.fhir.r4.model.PractitionerRole) FhirValidationException(uk.nhs.adaptors.scr.exceptions.FhirValidationException) OrganizationSDS(uk.nhs.adaptors.scr.models.xml.OrganizationSDS) Practitioner(org.hl7.fhir.r4.model.Practitioner) Identifier(org.hl7.fhir.r4.model.Identifier) RelatedPerson(org.hl7.fhir.r4.model.RelatedPerson) Person(uk.nhs.adaptors.scr.models.xml.Person) AgentPerson(uk.nhs.adaptors.scr.models.xml.AgentPerson) AgentPersonSDS(uk.nhs.adaptors.scr.models.xml.AgentPersonSDS)

Example 2 with OrganizationSDS

use of uk.nhs.adaptors.scr.models.xml.OrganizationSDS in project summary-care-record-api by NHSDigital.

the class ParticipantAgentMapper method setAgentDevice.

private static void setAgentDevice(Bundle bundle, Reference individual, Participant.Author1 author) {
    var organizationReference = individual.getReference();
    var organization = getResourceByReference(bundle, organizationReference, org.hl7.fhir.r4.model.Organization.class).orElseThrow(() -> new FhirValidationException("Bundle is missing Organization %s that is linked to PractitionerRole"));
    var device = getDomainResourceList(bundle, org.hl7.fhir.r4.model.Device.class).stream().filter(dev -> organizationReference.equals(dev.getOwner().getReference())).reduce((a, b) -> {
        throw new FhirValidationException(String.format("Bundle has more than 1 Device resource referencing %s", organizationReference));
    });
    var agentDevice = new AgentDevice();
    var code = organization.getTypeFirstRep().getCodingFirstRep().getCode();
    if (StringUtils.isNotBlank(code)) {
        var representedOrganization = new Organization("representedOrganization");
        representedOrganization.setIdRoot("1.2.826.0.1285.0.1.10");
        representedOrganization.setIdExtension(organization.getIdentifierFirstRep().getValue());
        representedOrganization.setCodeCode(code);
        representedOrganization.setName(organization.getName());
        representedOrganization.setTelecom(organization.getTelecomFirstRep().getValue());
        representedOrganization.setAddress(organization.getAddressFirstRep().getText());
        agentDevice.setOrganization(representedOrganization);
    } else {
        Identifier identifier = organization.getIdentifierFirstRep();
        if (ORG_SDS_SYSTEM.equals(identifier.getSystem()) && !identifier.hasValue()) {
            throw new FhirValidationException("Organization.identifier.value element is missing");
        }
        var representedOrganizationSDS = new OrganizationSDS("representedOrganizationSDS");
        representedOrganizationSDS.setIdRoot("1.2.826.0.1285.0.1.10");
        representedOrganizationSDS.setIdExtension(identifier.getValue());
        agentDevice.setOrganizationSDS(representedOrganizationSDS);
    }
    device.ifPresent(it -> {
        agentDevice.setIdRoot(it.getIdentifierFirstRep().getValue());
        if (SDS_DEVICE_SYSTEM.equals(it.getIdentifierFirstRep().getSystem())) {
            var agentDeviceSDS = new DeviceSDS("agentDeviceSDS");
            agentDeviceSDS.setIdRoot("1.2.826.0.1285.0.2.0.107");
            if (it.getIdentifierFirstRep().hasValue()) {
                agentDeviceSDS.setIdExtension(it.getIdentifierFirstRep().getValue());
            } else {
                throw new FhirValidationException("Device.identifier.value is missing");
            }
            agentDevice.setDeviceSDS(agentDeviceSDS);
        } else {
            var agentDevice1 = new Device("agentDevice");
            agentDevice1.setIdRoot("1.2.826.0.1285.0.2.0.107");
            agentDevice1.setIdExtension(it.getIdentifierFirstRep().getValue());
            setDeviceCoding(it, agentDevice1);
            it.getDeviceName().stream().filter(deviceName -> deviceName.getType() == OTHER).findFirst().map(org.hl7.fhir.r4.model.Device.DeviceDeviceNameComponent::getName).ifPresent(agentDevice1::setName);
            it.getDeviceName().stream().filter(deviceName -> deviceName.getType() == MANUFACTURERNAME).findFirst().map(org.hl7.fhir.r4.model.Device.DeviceDeviceNameComponent::getName).ifPresent(agentDevice1::setManufacturerModelName);
            agentDevice1.setDescription(it.getNoteFirstRep().getText());
            agentDevice1.setSoftwareName(it.getVersionFirstRep().getValue());
            agentDevice.setDevice(agentDevice1);
        }
    });
    author.setAgentDevice(agentDevice);
}
Also used : MANUFACTURERNAME(org.hl7.fhir.r4.model.Device.DeviceNameType.MANUFACTURERNAME) Organization(uk.nhs.adaptors.scr.models.xml.Organization) PersonSDS(uk.nhs.adaptors.scr.models.xml.PersonSDS) Identifier(org.hl7.fhir.r4.model.Identifier) DeviceSDS(uk.nhs.adaptors.scr.models.xml.DeviceSDS) NonAgentRole(uk.nhs.adaptors.scr.models.xml.NonAgentRole) CodeableConcept(org.hl7.fhir.r4.model.CodeableConcept) Reference(org.hl7.fhir.r4.model.Reference) StringUtils(org.apache.commons.lang3.StringUtils) StringUtils.isNotEmpty(org.apache.commons.lang3.StringUtils.isNotEmpty) RelatedPerson(org.hl7.fhir.r4.model.RelatedPerson) OTHER(org.hl7.fhir.r4.model.Device.DeviceNameType.OTHER) Person(uk.nhs.adaptors.scr.models.xml.Person) HumanName(org.hl7.fhir.r4.model.HumanName) AgentPersonSDS(uk.nhs.adaptors.scr.models.xml.AgentPersonSDS) Device(uk.nhs.adaptors.scr.models.xml.Device) Practitioner(org.hl7.fhir.r4.model.Practitioner) AgentDevice(uk.nhs.adaptors.scr.models.xml.AgentDevice) DateUtil.formatDateToHl7(uk.nhs.adaptors.scr.utils.DateUtil.formatDateToHl7) AgentPerson(uk.nhs.adaptors.scr.models.xml.AgentPerson) FhirHelper.getDomainResourceList(uk.nhs.adaptors.scr.utils.FhirHelper.getDomainResourceList) FhirValidationException(uk.nhs.adaptors.scr.exceptions.FhirValidationException) FhirHelper.getResourceByReference(uk.nhs.adaptors.scr.utils.FhirHelper.getResourceByReference) ContactPoint(org.hl7.fhir.r4.model.ContactPoint) Collectors(java.util.stream.Collectors) PractitionerRole(org.hl7.fhir.r4.model.PractitionerRole) EncounterParticipantComponent(org.hl7.fhir.r4.model.Encounter.EncounterParticipantComponent) Slf4j(lombok.extern.slf4j.Slf4j) Participant(uk.nhs.adaptors.scr.models.xml.Participant) Coding(org.hl7.fhir.r4.model.Coding) Optional(java.util.Optional) Bundle(org.hl7.fhir.r4.model.Bundle) OrganizationSDS(uk.nhs.adaptors.scr.models.xml.OrganizationSDS) Organization(uk.nhs.adaptors.scr.models.xml.Organization) Identifier(org.hl7.fhir.r4.model.Identifier) Device(uk.nhs.adaptors.scr.models.xml.Device) AgentDevice(uk.nhs.adaptors.scr.models.xml.AgentDevice) AgentDevice(uk.nhs.adaptors.scr.models.xml.AgentDevice) FhirValidationException(uk.nhs.adaptors.scr.exceptions.FhirValidationException) OrganizationSDS(uk.nhs.adaptors.scr.models.xml.OrganizationSDS) DeviceSDS(uk.nhs.adaptors.scr.models.xml.DeviceSDS)

Aggregations

Optional (java.util.Optional)2 Collectors (java.util.stream.Collectors)2 Slf4j (lombok.extern.slf4j.Slf4j)2 StringUtils (org.apache.commons.lang3.StringUtils)2 StringUtils.isNotEmpty (org.apache.commons.lang3.StringUtils.isNotEmpty)2 Bundle (org.hl7.fhir.r4.model.Bundle)2 CodeableConcept (org.hl7.fhir.r4.model.CodeableConcept)2 Coding (org.hl7.fhir.r4.model.Coding)2 ContactPoint (org.hl7.fhir.r4.model.ContactPoint)2 MANUFACTURERNAME (org.hl7.fhir.r4.model.Device.DeviceNameType.MANUFACTURERNAME)2 OTHER (org.hl7.fhir.r4.model.Device.DeviceNameType.OTHER)2 EncounterParticipantComponent (org.hl7.fhir.r4.model.Encounter.EncounterParticipantComponent)2 HumanName (org.hl7.fhir.r4.model.HumanName)2 Identifier (org.hl7.fhir.r4.model.Identifier)2 Practitioner (org.hl7.fhir.r4.model.Practitioner)2 PractitionerRole (org.hl7.fhir.r4.model.PractitionerRole)2 Reference (org.hl7.fhir.r4.model.Reference)2 RelatedPerson (org.hl7.fhir.r4.model.RelatedPerson)2 FhirValidationException (uk.nhs.adaptors.scr.exceptions.FhirValidationException)2 AgentDevice (uk.nhs.adaptors.scr.models.xml.AgentDevice)2