Search in sources :

Example 1 with AgentPersonSDS

use of uk.nhs.adaptors.scr.models.xml.AgentPersonSDS 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)

Aggregations

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