CMSgov/dpc-app

View on GitHub
dpc-common/src/main/java/gov/cms/dpc/fhir/converters/entities/RosterEntityConverter.java

Summary

Maintainability
A
0 mins
Test Coverage
package gov.cms.dpc.fhir.converters.entities;

import gov.cms.dpc.common.entities.AttributionRelationship;
import gov.cms.dpc.common.entities.RosterEntity;
import gov.cms.dpc.fhir.DPCIdentifierSystem;
import gov.cms.dpc.fhir.converters.FHIRConverter;
import gov.cms.dpc.fhir.converters.FHIREntityConverter;
import org.hl7.fhir.dstu3.model.*;

import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

public class RosterEntityConverter implements FHIRConverter<Group, RosterEntity> {

    public RosterEntityConverter() {
        // Not used
    }

    @Override
    public RosterEntity fromFHIR(FHIREntityConverter converter, Group resource) {
        throw new UnsupportedOperationException("Entity cannot be converted from FHIR, using this class");
    }

    @Override
    public Group toFHIR(FHIREntityConverter converter, RosterEntity entity) {
        final Group group = new Group();
        group.setType(Group.GroupType.PERSON);
        group.setActual(true);
        group.setId(entity.getId().toString());

        final CodeableConcept attributedConcept = new CodeableConcept();
        attributedConcept.addCoding().setCode("attributed-to");

        final CodeableConcept providerConcept = new CodeableConcept();
        providerConcept.addCoding().setSystem(DPCIdentifierSystem.NPPES.getSystem()).setCode(entity.getAttributedProvider().getProviderNPI());
        group.addCharacteristic()
                .setCode(attributedConcept)
                .setValue(providerConcept)
                .setExclude(false);

        final List<Group.GroupMemberComponent> patients = entity
                .getAttributions()
                .stream()
                .map(RosterEntityConverter::buildComponent)
                .collect(Collectors.toList());

        group.setMember(patients);

        return group;
    }

    @Override
    public Class<Group> getFHIRResource() {
        return Group.class;
    }

    @Override
    public Class<RosterEntity> getJavaClass() {
        return RosterEntity.class;
    }

    @SuppressWarnings("JdkObsolete") // Date class is used by FHIR stu3 Period model
    private static Group.GroupMemberComponent buildComponent(AttributionRelationship relationship) {
        final IdType id = new IdType("Patient", relationship.getPatient().getID().toString());
        final Reference reference = new Reference(id);
        final Group.GroupMemberComponent component = new Group.GroupMemberComponent();
        component.setInactive(relationship.isInactive());
        component.setEntity(reference);

        // Set the period begin, end
        final Period period = new Period();
        period.setStart(Date.from(relationship.getPeriodBegin().toInstant()));
        period.setEnd(Date.from(relationship.getPeriodEnd().toInstant()));
        component.setPeriod(period);
        return component;
    }
}